转换一个枚举列表(Convert an enum to List)

2019-07-20 04:47发布

我如何转换以下枚举为字符串的列表?

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

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

Answer 1:

使用Enum的静态方法, GetNames 。 它返回一个string[]就像这样:

Enum.GetNames(typeof(DataSourceTypes))

如果你想创建只有这样,做只有一个类型的方法enum ,而且转换数组到一个List ,你可以写这样的事情:

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


Answer 2:

我想补充另一种解决方案:对我来说,我需要在下拉按钮列表项使用枚举组。 因此,他们可能有空间,即需要更加人性化的描述:

  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扩展枚举。 这是我使用。

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

    }


文章来源: Convert an enum to List