Преобразование перечисления в список <строка>

104

Как преобразовать следующее Enum в список строк?

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

Я не смог найти этот точный вопрос, это Enum to List является самым близким, но я специально хочуList<string>

Джереми Томпсон
источник

Ответы:

179

Используйте Enumстатический метод GetNames. Он возвращает string[], например:

Enum.GetNames(typeof(DataSourceTypes))

Если вы хотите создать метод, который делает это только для одного типа enum, а также преобразует этот массив в a List, вы можете написать что-то вроде этого:

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

Using System.Linq;Для использования .ToList () вам понадобится верхняя часть вашего класса.

DCShannon
источник
7
@DCShannon, пожалуйста, не редактируйте популярные вопросы / ответы и не сокращайте пояснения. Хотя мы с вами понимаем сокращенный код, новичкам нужны все дополнительные детали, чтобы связать их со своими знаниями .
Джереми Томпсон
Кажется, Enum.GetNames(typeof(DataSourceTypes))вернуть общий System.Arrayвместо массива строк?
sookie
@sookie, см. ссылку msdn, это сигнатура метода GetNames () :public static string[] GetNames
Джереми Томпсон,
30

Я хочу добавить другое решение: в моем случае мне нужно использовать группу Enum в элементах списка раскрывающихся кнопок. Таким образом, в них может быть место, т.е. необходимы более удобные описания:

  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 для enum. Это то, что я использую.

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

    }
РКМорган
источник