for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
Есть ли более элегантный способ сделать это?
Ответ 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();
}
}
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.