1404 votes

Pouvez-Vous Parcourir Toutes Les Valeurs De L'Enum?

Cette question a déjà une réponse ici:
Comment énumérer un enum? 14 réponses

public enum Foos
{
    A,
    B,
    C
}

Est-il un moyen de faire une boucle par les valeurs possibles de Foo?

Fondamentalement?

foreach(Foo in Foos)

1983voto

JaredPar Points 333733

Oui, vous pouvez utiliser la méthode GetValues

var values = Enum.GetValues(typeof(Foos));

Ou la version dactylographiée

var values = Enum.GetValues(typeof(Foos)).Cast<Foos>();

J'ai depuis bien longtemps ajout d'une fonction d'assistance à ma bibliothèque privée pour une telle occasion

public static class EnumUtil {
  public static IEnumerable<T> GetValues<T>() {
    return Enum.GetValues(typeof(T)).Cast<T>();
  }
}

Utilisation:

var values = EnumUtil.GetValues<Foos>();

778voto

SLaks Points 391154
foreach(Foos foo in Enum.GetValues(typeof(Foos)))

118voto

Inisheer Points 11582
foreach (EMyEnum val in Enum.GetValues(typeof(EMyEnum)))
{
   Console.WriteLine(val);
}

De crédit de Jon Skeet ici: http://bytes.com/groups/net-c/266447-how-loop-each-items-enum

60voto

adrianbanks Points 36858
foreach (Foos foo in Enum.GetValues(typeof(Foos)))
{
    ...
}

35voto

Neil Barnwell Points 20731

Mise à JOUR
Un certain temps, je vois un commentaire qui me ramène à mon ancienne réponse, et je pense que je ferais les choses différemment maintenant. Ces jours, j'écrirais:

private static IEnumerable<T> GetEnumValues<T>()
{
    // Can't use type constraints on value types, so have to do check like this
    if (typeof(T).BaseType != typeof(Enum))
    {
        throw new ArgumentException("T must be of type System.Enum");
    }

    return Enum.GetValues(typeof(T)).Cast<T>();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X