ฉันจะแปลง Enum ต่อไปนี้เป็นรายการสตริงได้อย่างไร
[Flags]
public enum DataSourceTypes
{
None = 0,
Grid = 1,
ExcelFile = 2,
ODBC = 4
};
ฉันไม่พบคำถามที่แน่นอนนี้Enum to Listนี้ใกล้เคียงที่สุด แต่ฉันต้องการเป็นพิเศษList<string>
ฉันจะแปลง Enum ต่อไปนี้เป็นรายการสตริงได้อย่างไร
[Flags]
public enum DataSourceTypes
{
None = 0,
Grid = 1,
ExcelFile = 2,
ODBC = 4
};
ฉันไม่พบคำถามที่แน่นอนนี้Enum to Listนี้ใกล้เคียงที่สุด แต่ฉันต้องการเป็นพิเศษList<string>
คำตอบ:
ใช้Enum
วิธีการคงที่, GetNames
. มันส่งกลับ a string[]
เช่น:
Enum.GetNames(typeof(DataSourceTypes))
หากคุณต้องการสร้างเมธอดที่ทำสิ่งนี้ได้เพียงประเภทเดียวenum
และยังแปลงอาร์เรย์นั้นเป็น a List
คุณสามารถเขียนดังนี้:
public List<string> GetDataSourceTypes()
{
return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}
คุณจะต้องUsing System.Linq;
อยู่ด้านบนสุดของชั้นเรียนเพื่อใช้ .oList ()
Enum.GetNames(typeof(DataSourceTypes))
ส่งคืนทั่วไปSystem.Array
แทนที่จะเป็นสตริงอาร์เรย์?
public static string[] GetNames
ฉันต้องการเพิ่มโซลูชันอื่น: ในกรณีของฉันฉันต้องใช้กลุ่ม Enum ในรายการปุ่มแบบเลื่อนลง ดังนั้นพวกเขาจึงอาจมีที่ว่างเช่นต้องการคำอธิบายที่เป็นมิตรกับผู้ใช้มากขึ้น:
public enum CancelReasonsEnum
{
[Description("In rush")]
InRush,
[Description("Need more coffee")]
NeedMoreCoffee,
[Description("Call me back in 5 minutes!")]
In5Minutes
}
ในคลาสตัวช่วย (HelperMethods) ฉันสร้างวิธีการต่อไปนี้:
public static List<string> GetListOfDescription<T>() where T : struct
{
Type t = typeof(T);
return !t.IsEnum ? null : Enum.GetValues(t).Cast<Enum>().Select(x => x.GetDescription()).ToList();
}
เมื่อคุณเรียกตัวช่วยนี้คุณจะได้รับรายการคำอธิบายรายการ
List<string> items = HelperMethods.GetListOfDescription<CancelReasonEnum>();
เพิ่มเติม: ในกรณีใด ๆ หากคุณต้องการใช้วิธีนี้คุณต้อง: ส่วนขยาย GetDescription สำหรับ enum นี่คือสิ่งที่ฉันใช้
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =Attribute.GetCustomAttribute(field,typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
/* how to use
MyEnum x = MyEnum.NeedMoreCoffee;
string description = x.GetDescription();
*/
}