将枚举转换为List <string>
如何将下面的枚举转换为string列表?
[Flags] public enum DataSourceTypes { None = 0, Grid = 1, ExcelFile = 2, ODBC = 4 };
我无法find这个确切的问题,这个枚举到列表是最接近的,但我特别希望List<string>
使用Enum
的静态方法, GetNames
。 它返回一个string[]
,如下所示:
Enum.GetNames(typeof(DataSourceTypes))
如果你想创build一个只为一种types的enum
,并且将该数组转换为一个List
,你可以这样写:
public List<string> GetDataSourceTypes() { return Enum.GetNames(typeof(DataSourceTypes)).ToList(); }
我想添加另一个解决scheme:在我的情况下,我需要在一个下拉列表项目中使用一个枚举组。 所以他们可能有空间,即需要更多的用户友好的描述:
public enum CancelReasonsEnum { [Description("In rush")] InRush, [Description("Need more coffee")] NeedMoreCoffee, [Description("Call me back in 5 minutes!")] In5Minutes }
在一个辅助类(HelperMethods)中,我创build了以下方法:
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扩展的枚举。 这是我用的。
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(); */ }