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

C'è un modo più elegante per farlo?Riesci a riprodurre un enum in C#?

+5

Il codice funziona solo per le enumerazioni supportate da inte, in cui l'intervallo è consecutivo. –

+0

possibile duplicato di [C# Iterating through enum? (Indicizzazione di un file System.Array)] (http://stackoverflow.com/questions/482729/c-sharp-iterating-through-an-enum-indexing-a-system-array) –

risposta

58

Si dovrebbe essere in grado di utilizzare il seguente:

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

Il metodo public static Array GetValues(Type enumType) restituisce un array con i valori dell'enumerazione anEnum. Poiché gli array implementano l'interfaccia IEnumerable, è possibile enumerarli. Per esempio:

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

Si può vedere spiegazione più dettagliata MSDN.

8

Le enumerazioni sono tipi di interi, ma non è possibile fare affidamento sui propri valori per essere sempre sequenziali o in ordine crescente. È possibile assegnare valori interi a enum valori che sarebbe rompere il vostro semplice for ciclo:

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

Come altri hanno detto, Enum.GetValues è la strada da percorrere, invece.