Betrachten Sie den folgenden C#-Code:
enum Beer { Bud = 10, Stella = 20, Unknown }
Normalerweise wird erwartet, dass das Umwandeln eines Eine Ganzzahl außerhalb des Bereichs einer Aufzählung, wie die folgende, würde eine auslösen Ausnahme:
int i = 50; var b = (Beer)i;
Der obige Code löst jedoch keine Ausnahme aus und gibt stattdessen „50“ an die Konsole aus.
Dies ist bedingt zu einer Designentscheidung im .NET Framework. Eine Aufzählung wird durch einen anderen Werttyp (int, short, byte usw.) unterstützt und kann daher jeden Wert haben, der für diese Werttypen gültig ist.
Während dieser Obwohl das Verhalten verwirrend sein kann, ermöglicht es auch die Erstellung von „Bit-Flag“-Aufzählungen, bei denen binäre Muster verwendet werden, um verschiedene Flag-Kombinationen innerhalb eines Aufzählungswerts darzustellen. Es wäre mühsam, jede mögliche Flag-Kombination explizit zu definieren.
Um das Problem undefinierter Enum-Werte zu beheben, wird empfohlen, Dienstprogrammmethoden zu verwenden, die schnell fehlschlagen, wie zum Beispiel:
public static class EnumUtil<T> { public static T DefinedCast(object enumValue) { if (!System.Enum.IsDefined(typeof(T), enumValue)) throw new InvalidCastException(enumValue + " is not a defined value for enum type " + typeof(T).FullName); return (T)enumValue; } }
Diese Methode löst aus eine Ausnahme, wenn der Umwandlungswert nicht für den Aufzählungstyp definiert ist.
Das obige ist der detaillierte Inhalt vonWarum löst das Umwandeln eines Int in einen ungültigen Enum-Wert in C# keine Ausnahme aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!