Convert an enum to List<string>
如何将以下枚举转换为字符串列表?
1 2 3 4 5 6 7 8 | [Flags] public enum DataSourceTypes { None = 0, Grid = 1, ExcelFile = 2, ODBC = 4 }; |
我找不到这个确切的问题,这个枚举列表是最近的,但我特别想要
使用
1 |
如果要创建只对一种类型的
1 2 3 4 | public List<string> GetDataSourceTypes() { return Enum.GetNames(typeof(DataSourceTypes)).ToList(); } |
我想添加另一个解决方案:在我的例子中,我需要在下拉按钮列表项中使用枚举组。因此,它们可能有空间,也就是说,需要更多用户友好的描述:
1 2 3 4 5 6 7 8 9 | public enum CancelReasonsEnum { [Description("In rush")] InRush, [Description("Need more coffee")] NeedMoreCoffee, [Description("Call me back in 5 minutes!")] In5Minutes } |
在助手类(helpermethods)中,我创建了以下方法:
1 2 3 4 5 | 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(); } |
当您调用这个助手时,您将得到项目描述的列表。
1 | List<string> items = HelperMethods.GetListOfDescription<CancelReasonEnum>(); |
添加:在任何情况下,如果要实现此方法,则需要:GetDescription扩展名作为枚举。这是我用的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | 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(); */ } |