C # Итерирование по перечислению? (Индексирование System.Array) - PullRequest
107 голосов
/ 27 января 2009

У меня есть следующий код:

// 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] ); 
}

Однако я не могу индексировать значения. Есть ли более простой способ сделать это?

Или я что-то упустил полностью!

Ответы [ 13 ]

2 голосов
/ 27 января 2009

В массиве есть метод GetValue (Int32), который можно использовать для получения значения по указанному индексу.

Array.GetValue

0 голосов
/ 01 августа 2018

Древний вопрос, но ответ 3Dave предоставил самый простой подход. Мне понадобился небольшой вспомогательный метод для генерации сценария Sql для декодирования значения enum в базе данных для отладки. Работало отлично:

    public static string EnumToCheater<T>() {
        var sql = "";
        foreach (var enumValue in Enum.GetValues(typeof(T)))
            sql += $@"when {(int) enumValue} then '{enumValue}' ";
        return $@"case ?? {sql}else '??' end,";
    }

У меня это в статическом методе, поэтому использование:

var cheater = MyStaticClass.EnumToCheater<MyEnum>()
0 голосов
/ 12 сентября 2009

Вот простой способ перебора вашего пользовательского объекта Enum

For Each enumValue As Integer In [Enum].GetValues(GetType(MyEnum))

     Print([Enum].GetName(GetType(MyEnum), enumValue).ToString)

Next
...