将枚举转换为 List < string >

如何将下列枚举转换为字符串列表?

[Flags]
public enum DataSourceTypes
{
None = 0,
Grid = 1,
ExcelFile = 2,
ODBC = 4
};

我找不到这个确切的问题,这个 枚举到列表是最接近的,但我特别想要 List<string>

137309 次浏览

使用 Enum的静态方法 GetNames,它返回一个 string[],如下所示:

Enum.GetNames(typeof(DataSourceTypes))

如果您希望创建一个只为一种类型的 enum执行此操作的方法,并且还要将该数组转换为 List,那么您可以编写如下代码:

public List<string> GetDataSourceTypes()
{
return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}

您需要在类的顶部使用 Using System.Linq;

我想补充另一个解决方案: 在我的示例中,我需要在下拉按钮列表项中使用 Enum 组。所以他们可能有空间,也就是说需要更加用户友好的描述:

  public enum CancelReasonsEnum
{
[Description("In rush")]
InRush,
[Description("Need more coffee")]
NeedMoreCoffee,
[Description("Call me back in 5 minutes!")]
In5Minutes
}

在助手类(HelperMethod)中,我创建了以下方法:

 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();
*/


}

在我的情况下,我需要将其转换为 < strong > SelectItem 的复选框和单选按钮

public class Enum<T> where T : struct, IConvertible
{
public static List<SelectItem> ToSelectItems
{
get
{
if (!typeof(T).IsEnum)
throw new ArgumentException("T must be an enumerated type");
            

var values = Enum.GetNames(typeof(T));
return values.Select((t, i) => new SelectItem() {Id = i, Name = t}).ToList();
}
}
}