Преобразование перечисления в список
Как преобразовать следующее перечисление в список строк?
[Flags]
public enum DataSourceTypes
{
None = 0,
Grid = 1,
ExcelFile = 2,
ODBC = 4
};
Я не могу найти этот точный вопрос, это перечислить в список ближе всего, но я специально хочу List<string>
2 ответа:
использовать С
GetNames
. Он возвращаетstring[]
, например:Enum.GetNames(typeof(DataSourceTypes))
если вы хотите создать метод, который делает это только для одного типа
enum
, а также преобразует массивList
, вы можете написать что-то вроде этого:public List<string> GetDataSourceTypes() { return Enum.GetNames(typeof(DataSourceTypes)).ToList(); }
Я хочу добавить еще одно решение: В моем случае мне нужно использовать группу перечислений в выпадающих элементах списка кнопок. Таким образом, они могут иметь пространство, т. е. необходимы более удобные описания:
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(); */ }