Wie man alle Enum-Werte in C# durchläuft: Vom Anfänger zum Profi
\n\nStellen Sie sich vor: Sie schreiben ein Spiel in C# und haben eine Aufzählung Difficulty mit Schwierigkeitsgraden: Easy, Normal, Hard, Insane. Sie müssen alle in einem Auswahlmenü anzeigen oder, sagen wir, eine Dropdown-Liste für einen Konfigurator erstellen. Wie macht man das? Manuell ein String-Array schreiben? Und wenn morgen ein neuer Level hinzugefügt wird? Müssten Sie in den Code eingreifen und ihn an drei Stellen ändern.
Glücklicherweise gibt es in C# eine elegante Lösung. Die Frage "How to loop through all enum values in C#?" ist eine der beliebtesten auf Stack Overflow (Hunderttausende von Aufrufen). Und heute werden wir sie vollständig behandeln. Sie lernen nicht nur eine, sondern ganze 4 Methoden zum Durchlaufen von Enum-Werten, verstehen, welche wann verwendet wird, und erhalten fertigen Code, den Sie in Ihr Projekt kopieren können.
\n\nLos geht's!
\n\n\n\n
Was ist ein Enum in C# und warum sollte man es durchlaufen?
\n\nEin Enum (Aufzählung) ist eine Menge benannter Konstanten. Anstatt sich zu merken, dass 0 = Easy, 1 = Normal, 2 = Hard ist, schreiben Sie einfach Difficulty.Easy. Der Code wird lesbar und sicher.
Aber wenn ein Projekt 10-20 Enum-Werte hat, stellt sich früher oder später die Aufgabe: alle abrufen. Zum Beispiel:
\n- \n
- Eine ComboBox oder Dropdown in der UI füllen. \n
- Testdaten für alle Varianten erstellen. \n
- Attribute auf jeden Wert anwenden. \n
- Zwei Enum-Sets vergleichen. \n
Anstatt zu schreiben:
\nstring[] names = { "Easy", "Normal", "Hard", "Insane" };\n\n…verwenden wir Reflektion und integrierte .NET-Methoden. Das ist flexibel, skalierbar und erfordert keine manuelle Aktualisierung.
\n\n\n\n
Methode 1: Der Klassiker — Enum.GetValues (die beliebteste)
\n\nDies ist die Antwort, die Sie auf Stack Overflow mit den meisten Stimmen finden. Die Methode Enum.GetValues(typeof(YourEnum)) gibt ein Array aller Werte einer bestimmten Aufzählung zurück.
Codebeispiel:
\nusing System;\n\npublic enum Difficulty\n{\n Easy,\n Normal,\n Hard,\n Insane\n}\n\nclass Program\n{\n static void Main()\n {\n Console.WriteLine("Alle Schwierigkeitsgrade:");\n \n // Array der Enum-Werte abrufen\n Difficulty[] allDifficulties = (Difficulty[])Enum.GetValues(typeof(Difficulty));\n \n foreach (Difficulty level in allDifficulties)\n {\n Console.WriteLine($"Stufe: {level} (numerischer Wert: {(int)level})");\n }\n }\n}\n\nKonsolenausgabe:
\nAlle Schwierigkeitsgrade:\nStufe: Easy (numerischer Wert: 0)\nStufe: Normal (numerischer Wert: 1)\nStufe: Hard (numerischer Wert: 2)\nStufe: Insane (numerischer Wert: 3)\n\nWichtig: Enum.GetValues gibt ein Array vom Typ Array zurück, daher muss es explizit in Ihren Enum-Typ umgewandelt werden. Ab .NET 5 gibt es eine generische Version: Enum.GetValues<Difficulty>(), die etwas bequemer ist.
// .NET 5+ \nDifficulty[] allDifficulties = Enum.GetValues<Difficulty>();\nforeach (var level in allDifficulties)\n{\n Console.WriteLine(level);\n}\n\n\n\n
Methode 2: Namen mit Enum.GetNames abrufen
\n\nManchmal benötigen Sie nicht die Werte selbst, sondern deren Zeichenfolgennamen (z. B. für die UI). Dafür gibt es Enum.GetNames. Es gibt ein String-Array zurück.
Beispiel:
\nstring[] names = Enum.GetNames(typeof(Difficulty));\nConsole.WriteLine("Namen der Stufen:");\nforeach (string name in names)\n{\n Console.WriteLine(name);\n}\n\nAusgabe:
\nNamen der Stufen:\nEasy\nNormal\nHard\nInsane\n\nWann verwenden? Wenn Sie Zeichenfolgen benötigen (z. B. zur Anzeige in der Benutzeroberfläche oder für die Protokollierung) und nicht die Enum-Konstanten selbst.