HOWTO · Csharp
Konvertieren Sie Int in Enum in C#
Erfahren Sie, wie Sie eine Ganzzahl per Cast oder Parsing in ein C#-Enum konvertieren und prüfen, ob das Ergebnis ein deklariertes Element ist.
Auf dieser Seite
Um in C# eine Ganzzahl in einen Enum-Wert umzuwandeln, casten Sie sie in den Enum-Typ: MyEnum value = (MyEnum)number;. Ein Enum ist ein Werttyp mit benannten Konstanten und einem zugrunde liegenden ganzzahligen Typ. Ein Cast wandelt den zugrunde liegenden Wert um, prüft aber nicht, ob dieser einer deklarierten Konstante entspricht. Verwenden Sie Enum.IsDefined, wenn nur benannte Mitglieder zulässig sind, und Enum.Parse oder Enum.TryParse, wenn die Eingabe als Text vorliegt.
Eine Ganzzahl mit einem direkten Cast in einen Enum-Wert umwandeln
Ein direkter Cast ist die einfachste Wahl, wenn die Ganzzahl bereits vorliegt und Sie ihren Wert kontrollieren. Dieses vollständige Beispiel definiert ein Enum mit dem standardmäßigen zugrunde liegenden Typ int, castet den Wert 2 und gibt den Namen des entsprechenden Mitglieds aus. Die Ausgabe zeigt Two; die Bezeichnung Converted Enum Value bleibt im unveränderten Beispiel auf Englisch.
using System;
public class Program
{
public enum MyEnum { Zero = 0, One = 1, Two = 2 }
public static void Main()
{
int number = 2;
MyEnum value = (MyEnum)number;
Console.WriteLine($"Converted Enum Value: {value}");
}
}
Der Cast prüft das Ergebnis nicht. Beim Casten von 7 entsteht beispielsweise ein Enum-Wert mit dem zugrunde liegenden Wert 7, obwohl MyEnum kein Mitglied mit diesem Wert deklariert. Prüfen Sie vor dem Cast mit Enum.IsDefined, ob Ihre Anwendung ausschließlich deklarierte Mitglieder akzeptieren soll.
Eine Ganzzahlzeichenfolge mit Enum.Parse parsen
Enum.Parse erwartet eine Zeichenfolge. Liegt eine Ganzzahl als Text vor, übergeben Sie diese Zeichenfolge an die Methode und casten das zurückgegebene object in den gewünschten Enum-Typ. Das Beispiel parst die numerische Zeichenfolge "1". Die Ausgabe zeigt One; die Bezeichnung Parsed Enum Value bleibt im unveränderten Beispiel auf Englisch.
using System;
public class Program
{
public enum MyEnum { Zero = 0, One = 1, Two = 2 }
public static void Main()
{
string input = "1";
MyEnum value = (MyEnum)Enum.Parse(typeof(MyEnum), input);
Console.WriteLine($"Parsed Enum Value: {value}");
}
}
Beim Parsen einer numerischen Zeichenfolge kann ein Enum-Wert entstehen, dessen zugrunde liegende Zahl keinem deklarierten Mitglied entspricht. Bei ungültiger Eingabe löst Enum.Parse außerdem eine Ausnahme aus. Verwenden Sie daher Enum.TryParse, wenn Sie gewöhnliche Konvertierungsfehler ohne Ausnahmesteuerung behandeln möchten. Ein erfolgreiches Parsen bestätigt für sich allein nicht, dass der Wert einem deklarierten Mitglied entspricht.
Mit Enum.IsDefined prüfen, ob ein Enum-Wert definiert ist
Mit Enum.IsDefined prüfen Sie, ob ein Wert einer deklarierten Enum-Konstante entspricht. Dieses Beispiel prüft vor dem Cast sowohl einen deklarierten als auch einen nicht deklarierten Ganzzahlwert. Da MyEnum standardmäßig den zugrunde liegenden Typ int verwendet, stimmen die als object übergebenen, geboxten int-Argumente mit dem zugrunde liegenden Typ des Enums überein. Die Ausgabe zeigt, dass 2 als Two definiert ist und 7 nicht; die Textbezeichnungen in der unveränderten Ausgabe bleiben auf Englisch.
using System;
public class Program
{
public enum MyEnum { Zero = 0, One = 1, Two = 2 }
public static void Main()
{
int[] candidates = { 2, 7 };
foreach (int number in candidates)
{
if (Enum.IsDefined(typeof(MyEnum), number))
{
MyEnum value = (MyEnum)number;
Console.WriteLine($"{number}: defined as {value}");
}
else
{
Console.WriteLine($"{number}: not defined");
}
}
}
}
Enum.IsDefined prüft auf eine exakt deklarierte Konstante. Für ein einfaches Enum mit einzeln deklarierten Werten ist das geeignet. Bei einem [Flags]-Enum muss eine gültige Kombination von Flags nicht selbst deklariert sein. Die Prüfung kann daher Kombinationen ablehnen, die Ihre Anwendung zulassen soll.
Eine Ganzzahlzeichenfolge mit Enum.TryParse parsen
Enum.TryParse gibt einen booleschen Wert zurück, der angibt, ob sich der Text in den Enum-Typ konvertieren ließ, und schreibt den geparsten Wert in seinen out-Parameter. Wenn Ihnen eine Ganzzahl vorliegt, wandeln Sie sie zunächst in Text um. Das Beispiel prüft zusätzlich separat, ob der Wert deklariert ist, denn erfolgreiches Parsen einer Zahl belegt nicht, dass sie einem deklarierten Mitglied entspricht. Die Ausgabe zeigt One und anschließend True für die separate Prüfung; die Bezeichnungen Parsed und Declared bleiben im unveränderten Beispiel auf Englisch.
using System;
public class Program
{
public enum MyEnum { Zero = 0, One = 1, Two = 2 }
public static void Main()
{
int number = 1;
string input = number.ToString();
if (Enum.TryParse<MyEnum>(input, out MyEnum value))
{
Console.WriteLine($"Parsed: {value}");
Console.WriteLine($"Declared: {Enum.IsDefined(typeof(MyEnum), value)}");
}
else
{
Console.WriteLine("Could not parse the input.");
}
}
}
Bei Text mit einem Namen akzeptiert Enum.TryParse auch den Namen eines deklarierten Mitglieds, zum Beispiel "Two". Numerischer Text kann zu einem nicht deklarierten zugrunde liegenden Wert geparst werden. Behalten Sie deshalb die Prüfung mit Enum.IsDefined bei, wenn die Anwendung nur exakt deklarierte Mitglieder zulassen soll. Verwenden Sie die Überladung mit ignoreCase nur, wenn beim Abgleich von Namen die Groß- und Kleinschreibung ignoriert werden soll.
Die passende Konvertierungsmethode wählen
Wählen Sie die Methode anhand der Eingabeform und der benötigten Validierung:
- Verwenden Sie einen direkten Cast für eine Ganzzahl, der Sie bereits vertrauen, wenn auch ein nicht deklarierter Enum-Wert zulässig ist.
- Verwenden Sie
Enum.Parsefür Text, wenn ein fehlgeschlagenes Parsen als Ausnahme behandelt werden soll. - Verwenden Sie
Enum.TryParsefür Text, wenn Sie einen booleschen Rückgabewert für den Konvertierungserfolg benötigen. - Verwenden Sie
Enum.IsDefinedvor oder nach der Konvertierung, wenn nur deklarierte Enum-Konstanten zulässig sind.
Keine der beiden Parse-Methoden garantiert, dass eine numerische Eingabe einer deklarierten Konstante entspricht. Bei nicht vertrauenswürdigen oder dynamischen Eingaben können Sie zunächst parsen und anschließend mit Enum.IsDefined prüfen, ob Ihre Anwendung nur deklarierte Mitglieder akzeptiert. Legen Sie für [Flags]-Enums eigene Regeln für zulässige Kombinationen fest und wenden Sie diese an, statt sich allein auf Enum.IsDefined zu verlassen.