web-dev-qa-db-fra.com

Pouvez-vous parcourir une énumération en C #?

for (int i = (int)MY_ENUM.First; i <= (int)MY_ENUM.Last; i++)
{
    //do work
}

Existe-t-il une manière plus élégante de procéder?

31
coder

Vous devriez pouvoir utiliser les éléments suivants:

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

Les énumérations sont un peu comme des entiers, mais vous ne pouvez pas vous fier à leurs valeurs pour qu'elles soient toujours séquentielles ou ascendantes. Vous pouvez affecter des valeurs entières à des valeurs d'énumération qui briseraient votre boucle for simple:

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

Comme d'autres l'ont dit, Enum.GetValues est la voie à suivre à la place.

8
Adam Lear

Jeter un coup d'œil à Enum.GetValues :

foreach (var value in Enum.GetValues(typeof(MY_ENUM))) { ... }
6
kevingessner

La méthode public static Array GetValues(Type enumType) renvoie un tableau avec les valeurs de l'énumération anEnum. Étant donné que les tableaux implémentent l'interface IEnumerable, il est possible de les énumérer. Par exemple :

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

Vous pouvez voir une explication plus détaillée sur MSDN .

2
Michiel