Heim >Backend-Entwicklung >C++ >Warum löst das Umwandeln einer Ganzzahl in eine Aufzählung in .NET keine Ausnahme aus?

Warum löst das Umwandeln einer Ganzzahl in eine Aufzählung in .NET keine Ausnahme aus?

DDD
DDDOriginal
2025-01-03 17:46:40744Durchsuche

Why Does Casting an Integer to an Enum in .NET Not Throw an Exception?

Int in ungültige Enum-Werte umwandeln: Das unerwartete Verhalten verstehen

Anders als Javas starre Handhabung von Enum-Werten zeigen .NET-Enums unerwartetes Verhalten, wenn Umwandlung ungültiger Ganzzahlwerte in ihren Typ. Um dies zu veranschaulichen, betrachten Sie den folgenden Code:

enum Beer
{
    Bud = 10,
    Stella = 20,
    Unknown
}

var i = 50;
var b = (Beer) i;

Console.WriteLine(b.ToString());

Anstatt eine Ausnahme auszulösen, wandelt der Code überraschenderweise i in Beer um und gibt „50“ auf der Konsole aus. Warum passiert das?

Hinter den Kulissen werden Aufzählungen durch zugrunde liegende Werttypen wie int oder short gestützt. Dadurch können sie jeden Wert speichern, der für diese Typen gültig ist. Auch wenn die Beer-Aufzählung nur drei definierte Werte hat, kann sie dennoch i aufnehmen, was keiner von ihnen ist.

Dieses besondere Verhalten ist auf eine Entscheidung der Entwickler von .NET zurückzuführen. Obwohl es seine Vorteile hat, wurde es auch wegen seines Potenzials, zu Laufzeitfehlern zu führen, kritisiert.

Behebung des Problems

Um dieses Problem zu beheben, haben einige Entwickler etwas erstellt Dienstprogrammmethoden wie EnumUtil und EnumExtensions, die ein ausfallsicheres Verhalten für Aufzählungen bereitstellen. Diese Methoden stellen sicher, dass ein Enum-Wert definiert wird, bevor er umgewandelt wird, um unerwartete Ausnahmen zu vermeiden.

Hier ist ein Beispiel für die Verwendung von EnumUtil:

var definedValue = EnumUtil<Beer>.DefinedCast(i); // Throws exception if i is not defined in Beer
Console.WriteLine(definedValue.ToString());

Beyond the Explanation

Das einzigartige Verhalten von Enumerationen in .NET ermöglicht auch die Verwendung von „Bit-Flag“-Enumerationen. Diese Aufzählungen nutzen binäre Muster, um mehrere aktive Flags innerhalb eines einzelnen Aufzählungswerts darzustellen. Dies ist besonders nützlich in Szenarien, in denen die Definition aller möglichen Kombinationen von Flags umständlich wäre.

Fazit

Während manche das Umwandlungsverhalten von Aufzählungen in .NET seltsam finden, Es ist wichtig, die zugrunde liegende Begründung und die verfügbaren Optionen zu verstehen, um ein ausfallsicheres Verhalten beim Umgang mit ungültigen Enum-Werten sicherzustellen. Durch den Einsatz von Hilfsmethoden oder die Berücksichtigung der Möglichkeit von Bit-Flag-Aufzählungen können Entwickler die potenziellen Nachteile dieser einzigartigen .NET-Funktion abmildern.

Das obige ist der detaillierte Inhalt vonWarum löst das Umwandeln einer Ganzzahl in eine Aufzählung in .NET keine Ausnahme aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn