for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
¿Hay una manera más elegante de hacer esto?¿Puedes recorrer una enumeración en C#?
for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
//do work
}
¿Hay una manera más elegante de hacer esto?¿Puedes recorrer una enumeración en C#?
Usted debe ser capaz de utilizar el siguiente:
foreach (MY_ENUM enumValue in Enum.GetValues(typeof(MY_ENUM)))
{
// Do work.
}
Tome un vistazo a Enum.GetValues
:
foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }
public static Array GetValues(Type enumType)
El método devuelve una matriz con los valores de la enumeración anEnum. Como las matrices implementan la interfaz IEnumerable, es posible enumerarlas. Por ejemplo:
EnumName[] values = (EnumName[])Enum.GetValues(typeof(EnumName));
foreach (EnumName n in values)
Console.WriteLine(n);
Se puede ver explicación más detallada de MSDN.
Las enumeraciones son como números enteros, pero no puede confiar en que sus valores sean siempre secuenciales o ascendentes. Puede asignar valores enteros es posible enumerar los valores que romper su lazo simple 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();
}
}
Como han dicho otros, Enum.GetValues
es el camino a seguir en su lugar.
Tu código solo funcionará para las enumeraciones respaldadas por ints, donde el rango es consecutivo. –
posible duplicado de [C# Iterating a través de una enumeración? (Indexar un System.Array)] (http://stackoverflow.com/questions/482729/c-sharp-iterating-through-an-enum-indexing-a-system-array) –