Подтвердить что ты не робот

Можете ли вы прокрутить перечисление в С#?

for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
    //do work
}

Есть ли более элегантный способ сделать это?

4b9b3361

Ответ 1

Вы должны иметь возможность использовать следующее:

foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
   // Do work.
}

Ответ 2

Перечисления вроде как целые числа, но вы не можете полагаться на их значения, чтобы они всегда были последовательными или восходящими. Вы можете назначить целочисленные значения значениям перечисления, которые разбивают ваш простой цикл for:

public class Program
{
    enum MyEnum
    {
        First = 10,
        Middle,
        Last = 1
    }

    public static void Main(string[] args)
    {
        for (int i = (int)MyEnum.First; i <= (int)MyEnum.Last; i++)
        {
            Console.WriteLine(i); // will never happen
        }

        Console.ReadLine();
    }
}

Как говорили другие, Enum.GetValues - это вариант.

Ответ 3

Посмотрите Enum.GetValues:

foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }

Ответ 4

Метод public static Array GetValues(Type enumType) возвращает массив со значениями перечисления anEnum. Поскольку массивы реализуют интерфейс IEnumerable, их можно перечислить. Например:

 EnumName[] values = (EnumName[])Enum.GetValues(typeof(EnumName));
 foreach (EnumName n in values) 
     Console.WriteLine(n);

Вы можете увидеть более подробное объяснение в MSDN.