Ответ 1
Вы должны иметь возможность использовать следующее:
foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
// Do work.
}
for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
Есть ли более элегантный способ сделать это?
Вы должны иметь возможность использовать следующее:
foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
// Do work.
}
Перечисления вроде как целые числа, но вы не можете полагаться на их значения, чтобы они всегда были последовательными или восходящими. Вы можете назначить целочисленные значения значениям перечисления, которые разбивают ваш простой цикл 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
- это вариант.
Посмотрите Enum.GetValues
:
foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }
Метод public static Array GetValues(Type enumType)
возвращает массив со значениями перечисления anEnum. Поскольку массивы реализуют интерфейс IEnumerable, их можно перечислить.
Например:
EnumName[] values = (EnumName[])Enum.GetValues(typeof(EnumName));
foreach (EnumName n in values)
Console.WriteLine(n);
Вы можете увидеть более подробное объяснение в MSDN.