Heim > Backend-Entwicklung > C++ > Warum löst das Umwandeln eines Int in einen ungültigen Enum-Wert in C# keine Ausnahme aus?

Warum löst das Umwandeln eines Int in einen ungültigen Enum-Wert in C# keine Ausnahme aus?

Linda Hamilton
Freigeben: 2025-01-03 04:55:45
Original
189 Leute haben es durchsucht

Why Doesn't Casting an Int to an Invalid Enum Value in C# Throw an Exception?

Das Umwandeln von Int in einen ungültigen Enum-Wert löst keine Ausnahme aus.

Betrachten Sie den folgenden C#-Code:

enum Beer
{
    Bud = 10,
    Stella = 20,
    Unknown
}
Nach dem Login kopieren

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;
Nach dem Login kopieren

Der obige Code löst jedoch keine Ausnahme aus und gibt stattdessen „50“ an die Konsole aus.

Das NET Framework-Verhalten

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.

Implikationen und Lösungen

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;
    }
}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage