У меня такой код:
// Obtain the string names of all the elements within myEnum
String[] names = Enum.GetNames( typeof( myEnum ) );
// Obtain the values of all the elements within myEnum
Array values = Enum.GetValues( typeof( myEnum ) );
// Print the names and values to file
for ( int i = 0; i < names.Length; i++ )
{
print( names[i], values[i] );
}
Однако я не могу индексировать значения. Есть ли более простой способ сделать это?
Или я что-то совсем упустил!
Enum.GetName(typeof(MyEnum), val), (int)val)
в том случае, когда в выходных данных указывается имя и номер перечисления.Cast<T>
результат:Enum.GetValues(typeof(MyEnum)).Cast<MyEnum>()...
Вам необходимо преобразовать массив - возвращаемый массив действительно имеет запрошенный тип, т.е.
myEnum[]
если вы запрашиваетеtypeof(myEnum)
:Потом и
values[0]
т. Д.источник
Вы можете преобразовать этот массив в различные типы массивов:
или если вам нужны целочисленные значения:
Конечно, вы можете перебирать эти приведенные массивы :)
источник
Как насчет списка словарей?
и, конечно, вы можете изменить тип значения словаря на любые значения вашего перечисления.
источник
Другое решение с интересными возможностями:
источник
Вот еще один. Нам нужно было предоставить понятные имена для наших EnumValues. Мы использовали атрибут System.ComponentModel.DescriptionAttribute, чтобы показать настраиваемое строковое значение для каждого значения перечисления.
В использовании
Это закончится возвратом "Something 1", "Something 2".
источник
Как насчет использования цикла foreach, может быть, вы могли бы с этим поработать?
что-то подобное возможно?
источник
Старый вопрос, но немного более чистый подход с использованием LINQ
.Cast<>()
источник
В массиве есть метод GetValue (Int32), который можно использовать для получения значения по указанному индексу.
Array.GetValue
источник
Вы можете упростить это, используя строки формата. Я использую следующий фрагмент в сообщениях об использовании:
Спецификатор формата D форматирует значение перечисления как десятичное. Также есть спецификатор X, который дает шестнадцатеричный вывод.
Спецификатор G форматирует перечисление как строку. Если к перечислению применяется атрибут Flags, то также поддерживаются комбинированные значения. Существует спецификатор F, который действует так, как будто флаги всегда присутствуют.
См. Enum.Format ().
источник
В результатах Enum.GetValues приведение к int дает числовое значение. Использование ToString () дает понятное имя. Никаких других вызовов Enum.GetName не требуется.
источник
Вот простой способ перебрать ваш пользовательский объект Enum
источник
Древний вопрос, но ответ 3Dave предоставил самый простой подход. Мне нужен был небольшой вспомогательный метод для генерации сценария Sql для декодирования значения перечисления в базе данных для отладки. Это сработало отлично:
У меня это статический метод, поэтому использование:
источник