8 Stimmen

Warum erhalte ich keine InvalidCastException, wenn das Umwandeln eines Enums in einen Integer fehlschlägt?

public enum Tier
{
    Hund = 1,
    Katze = 2,
    Kuh = 3
}

int tierID = 4;
if ((Tier)tierID == Tier.Hund) // wirft keine Ausnahme

tierID kann nicht in Tier umgewandelt werden.
Warum erhalte ich keine InvalidCastException, wenn das Umwandeln des Enums in einen Integer fehlschlägt?

0 Stimmen

Daniel, was passiert, wenn du den Cast tatsächlich einem anderen Objekt zuweist und den Wert des Objekts nach der Zuweisung überprüfst? Du vergleichst nur mit ==, was zwar einen Wert zurückgibt, in Wirklichkeit jedoch nichts wirklich zuweist...

1 Stimmen

Mögliche Duplikat von Casting ints to enums in C#

1 Stimmen

11voto

ChrisF Punkte 130622

Weil es kein ungültiger Typumwandlung ist.

Der Wert, den Sie umwandeln, ist außerhalb des Bereichs für das Enum (in diesem Fall), aber er ist nicht ungültig.

Da die genehmigten Typen für ein Enum byte, sbyte, short, ushort, int, uint, long oder ulong sind, ist eine Umwandlung von Integer in Enum vollkommen legal.

Quelle - MSDN

1voto

MetaFight Punkte 1257

Dies ist ein beabsichtigtes Verhalten und kann ziemlich nützlich sein. Betrachten Sie Enums, die mit dem [Flag] Attribut definiert sind.

übrigens, dies ist ein Duplikat von Das Umwandeln einer außerhalb des Bereichs liegenden Zahl in ein Enum in C# wirft keine Ausnahme

mehr Antworten könnten dort sein :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X