1713 Stimmen

Wie man Schleife durch alle enum Werte in C #?

Auf diese Frage gibt es bereits eine Antwort hier:
Wie kann ich ein Enum in C# aufzählen? 26 Antworten

public enum Foos
{
    A,
    B,
    C
}

Gibt es eine Möglichkeit, eine Schleife durch die möglichen Werte von Foos ?

Im Grunde genommen?

foreach(Foo in Foos)

2443voto

JaredPar Punkte 699699

Ja, Sie können die GetValues método:

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

Oder die getippte Version:

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

Ich habe schon vor langer Zeit eine Hilfsfunktion in meine private Bibliothek aufgenommen, die genau für solche Fälle gedacht ist:

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

Verwendung:

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

919voto

SLaks Punkte 832502
foreach(Foos foo in Enum.GetValues(typeof(Foos)))

149voto

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

Dank an Jon Skeet hier: http://bytes.com/groups/net-c/266447-how-loop-each-items-enum

69voto

adrianbanks Punkte 78849
foreach (Foos foo in Enum.GetValues(typeof(Foos)))
{
    ...
}

44voto

Neil Barnwell Punkte 39692

AKTUALISIERT
Einige Zeit später sehe ich einen Kommentar, der mich zu meiner alten Antwort zurückbringt, und ich denke, ich würde es jetzt anders machen. Heutzutage würde ich schreiben:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X