可以在c#中循环枚举吗?

本文关键字:枚举 循环 | 更新日期: 2023-09-27 18:10:12

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

是否有更优雅的方法来做到这一点?

可以在c#中循环枚举吗?

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

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);