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#?
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#?
Si dovrebbe essere in grado di utilizzare il seguente:
foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
// Do work.
}
Date un'occhiata a Enum.GetValues
:
foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }
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.
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.
Il codice funziona solo per le enumerazioni supportate da inte, in cui l'intervallo è consecutivo. –
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) –