Enums sind ein wertvolles Werkzeug in C# zur Darstellung einer Menge benannter Konstanten. Häufig müssen Sie eine String-Darstellung eines Enum-Werts wieder in sein Enum-Äquivalent konvertieren. Dieser Artikel untersucht verschiedene Techniken zur sicheren und effizienten Durchführung dieser Konvertierung.
Inhaltsverzeichnis
- Verwendung von
Enum.Parse()
undEnum.TryParse()
- Ausnahmebehandlung mit
Enum.Parse()
- Überprüfung auf gültige Enum-Werte mit
Enum.IsDefined()
- Best Practices und Empfehlungen
Verwendung von Enum.Parse()
und Enum.TryParse()
C# bietet zwei Hauptmethoden für die String-zu-Enum-Konvertierung: Enum.Parse()
und Enum.TryParse()
. Enum.Parse()
ist unkompliziert, löst aber eine Ausnahme aus, wenn die Eingabezeichenkette nicht mit einem definierten Enum-Wert übereinstimmt. Enum.TryParse()
bietet eine sicherere Alternative und gibt einen booleschen Wert zurück, der den Erfolg oder Misserfolg anzeigt.
Enum.Parse()
Beispiel:
public enum DaysOfWeek
{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}
public static DaysOfWeek ParseDay(string dayString)
{
return (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayString, true); //true für Groß-/Kleinschreibung ignorieren
}
Enum.TryParse()
Beispiel:
public static bool TryParseDay(string dayString, out DaysOfWeek day)
{
return Enum.TryParse(dayString, true, out day); //true für Groß-/Kleinschreibung ignorieren
}
Enum.TryParse()
vermeidet Ausnahmen, wodurch es für die Behandlung von Benutzereingaben oder externen Daten, bei denen ungültige Werte möglich sind, vorzuziehen ist.
Ausnahmebehandlung mit Enum.Parse()
Obwohl Enum.TryParse()
empfohlen wird, ist das Verständnis der Ausnahmebehandlung mit Enum.Parse()
entscheidend. Ein try-catch
-Block kann potenzielle ArgumentException
s elegant verwalten:
public static DaysOfWeek ParseDayWithExceptionHandling(string dayString)
{
try
{
return (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), dayString, true); //true für Groß-/Kleinschreibung ignorieren
}
catch (ArgumentException ex)
{
Console.WriteLine($"Fehler beim Parsen von '{dayString}': {ex.Message}");
// Den Fehler entsprechend behandeln, z. B. einen Standardwert zurückgeben oder eine benutzerdefinierte Ausnahme auslösen.
return DaysOfWeek.Monday; // Oder eine benutzerdefinierte Ausnahme auslösen
}
}
Überprüfung auf gültige Enum-Werte mit Enum.IsDefined()
Vor dem Parsen ist es ratsam, mit Enum.IsDefined()
zu überprüfen, ob die Eingabezeichenkette einem gültigen Enum-Wert entspricht. Dies verbessert die Robustheit des Codes und verhindert unnötige Ausnahmen:
public static bool IsValidDay(string dayString)
{
return Enum.IsDefined(typeof(DaysOfWeek), dayString);
}
Best Practices und Empfehlungen
Für die meisten Szenarien ist Enum.TryParse()
aufgrund seiner ausnahmefreien Natur der empfohlene Ansatz. Kombinieren Sie es mit Enum.IsDefined()
für eine verbesserte Validierung vor dem Parsen. Behandeln Sie potenzielle Fehler immer korrekt, um robuste und benutzerfreundliche Anwendungen zu erstellen. Erwägen Sie die Verwendung eines Standardwerts oder das Auslösen einer benutzerdefinierten Ausnahme, um fehlgeschlagene Konvertierungen effektiv zu verwalten.