Wie man einen String in Enum in C# umwandelt: Vom Anfänger zum Profi
Jeder C#-Entwickler steht früher oder später vor der Situation, einen gewöhnlichen String in eine Aufzählung (Enum) umwandeln zu müssen. Sie erhalten Daten aus JSON, lesen Einstellungen aus einer Konfigurationsdatei oder nehmen einen Benutzerbefehl entgegen – und plötzlich haben Sie einen String, aber der Code erwartet ein Enum. Ohne die richtige Konvertierung riskieren Sie eine Ausnahme oder, schlimmer noch, einen unsichtbaren Logikfehler.
In diesem Artikel behandeln wir die Umwandlung eines Strings in Enum in C# von einfachen Methoden bis hin zu fortgeschrittenen Techniken. Sie erfahren, wie Sie Strings sicher parsen, Fehler behandeln und eleganten Code schreiben. Das Material basiert auf echten Fragen von Stack Overflow – das Thema hat nicht umsonst tausende Aufrufe.
Los geht's!
Warum die Konvertierung eines Strings in Enum eine häufige Aufgabe ist
Enums in C# sind ein mächtiges Werkzeug, um lesbaren und typsicheren Code zu erstellen. Aber die Außenwelt arbeitet normalerweise mit Strings: APIs geben "Admin" zurück, Benutzer geben "readonly" ein, die Datenbank speichert "Pending". Um diese Welten zu verbinden, ist eine Konvertierung von String in Enum in C# erforderlich.
Betrachten wir typische Szenarien:
- JSON-Deserialisierung – ein Statusfeld kommt als String
- Parsen von Befehlszeilenargumenten
- Lesen von Einstellungen aus appsettings.json
- Verarbeitung von Benutzereingaben in Webformularen
Ohne den richtigen Ansatz erhalten Sie entweder eine Ausnahme oder schwer zu findende Fehler. Lassen Sie uns die Werkzeuge genauer ansehen.
Basis-Methode: Enum.Parse – schnell und einfach
Die bekannteste Methode, um einen String in Enum in C# umzuwandeln, ist die Enum.Parse-Methode. Sie existiert seit den ersten .NET-Versionen und wird bis heute aktiv genutzt.
using System;
public enum UserRole{ Admin, Moderator, User, Guest}
class Program{ static void Main() { string input = "Admin"; UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input); Console.WriteLine(role); // Ausgabe: Admin }}Hier wandeln wir das Ergebnis explizit in den gewünschten Typ um, da Enum.Parse ein object zurückgibt. Die Methode unterscheidet zwischen Groß- und Kleinschreibung: Der String "admin" würde eine Ausnahme auslösen. Wenn Sie sich bei der Groß-/Kleinschreibung nicht sicher sind, fügen Sie einen dritten Parameter hinzu:
UserRole role = (UserRole)Enum.Parse(typeof(UserRole), input, ignoreCase: true);Jetzt werden "admin", "ADMIN" und sogar "AdMiN" korrekt umgewandelt. Es gibt jedoch einen Haken: Wenn der String keinem Enum-Wert entspricht, erhalten Sie eine ArgumentException. Und das bedeutet – das Programm stürzt ab.
Wann Enum.Parse eine schlechte Wahl ist
- Sie kontrollieren die Eingabedaten nicht (Benutzereingabe)
- Der String könnte null oder leer sein
- Sie möchten Ausnahmen vermeiden
Für solche Fälle wurde Enum.TryParse entwickelt.
Sicherer Ansatz: Enum.TryParse – ohne Ausnahmen
Enum.TryParse in C# ist Ihr Rettungsanker. Es löst keine Ausnahme aus, sondern gibt einen bool-Wert zurück: true bei erfolgreicher Konvertierung, andernfalls false.
string input = "Moderator";if (Enum.TryParse(input, ignoreCase: true, out UserRole result)){ Console.WriteLine($"Rolle: {result}");}else{ Console.WriteLine("Rolle konnte nicht erkannt werden");}Beachten Sie: TryParse ist eine generische Methode, daher ist keine Typumwandlung des Ergebnisses erforderlich. Der Parameter ignoreCase funktioniert genauso wie bei Parse. Diese Methode ist ideal für das sichere Parsen von Enums in C#.
Es gibt jedoch eine versteckte Falle: TryParse betrachtet das Parsen von numerischen Strings als erfolgreich. Der String "42" würde in einen Enum-Wert mit dem numerischen Äquivalent 42 umgewandelt, selbst wenn ein solcher Wert nicht existiert. Um dies zu vermeiden, fügen Sie