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

もっとエレガントな方法がありますか?C#の列挙型をループすることはできますか?

+5

あなたのコードは、範囲が連続しているintsでサポートされているenumに対してのみ機能します。 –

+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

列挙型は整数のようなものですが、値は常に逐次または昇順に依存することはできません。 Enum.GetValuesではなく、移動するための方法である、と述べている他の人のよう

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

:あなたは、単純なforループを壊す列挙値に整数値を割り当てることができます。

関連する問題