将枚举转换为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(); */ }