你可以在C#中循环枚举吗?

cod*_*der 31 c# enums

for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
    //do work
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?

Ber*_*ard 58

您应该能够使用以下内容:

foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
   // Do work.
}
Run Code Online (Sandbox Code Playgroud)


Ada*_*ear 8

枚举有点像整数,但你不能依赖它们的值来保持顺序或提升.您可以将整数值分配给会破坏简单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();
    }
}
Run Code Online (Sandbox Code Playgroud)

正如其他人所说,Enum.GetValues是走的路.


kev*_*ner 6

看看Enum.GetValues:

foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }
Run Code Online (Sandbox Code Playgroud)