2011-09-30 69 views
31
for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++) 
{ 
    //do work 
} 

有沒有更優雅的方式來做到這一點?你可以循環訪問C#中的枚舉嗎?

+5

您的代碼僅適用於由範圍連續的ints支持的枚舉。 –

+0

[C#遍歷枚舉的可能重複? (Indexing a System.Array)](http://stackoverflow.com/questions/482729/c-sharp-iterating-through-an-enum-indexing-a-system-array) –

回答

58

你應該能夠利用以下內容:

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

public static Array GetValues(Type enumType)方法返回與anEnum枚舉值的數組。由於數組實現了IEnumerable接口,因此可以枚舉它們。 例如:

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

您可以在MSDN看到更詳細的解釋。

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

正如其他人所說,Enum.GetValues是反潛的方式。