Casting von Ints in Aufzählungen in C #

Es gibt etwas, das ich in C # nicht verstehen kann. Sie können ein Objekt außerhalb der Reichweite werfenint In einenum und der Compiler zuckt nicht zusammen. Stell dir das vorenum:

enum Colour
{
    Red = 1,
    Green = 2,
    Blue = 3
}

Nun, wenn Sie schreiben:

Colour eco;
eco = (Colour)17;

Der Compiler findet das in Ordnung. Und die Laufzeit auch. Äh?

Warum hat das C # -Team beschlossen, dies zu ermöglichen? Ich denke, diese Entscheidung geht am Sinn der Verwendung von Aufzählungen in Szenarien wie diesen vorbei:

void DoSomethingWithColour(Colour eco)
{
    //do something to eco.
}

In einer stark typisierten Sprache wie C # würde ich das gerne annehmeneco wird immer eine legale haltenColour Wert. Dies ist jedoch nicht der Fall. Ein Programmierer könnte meine Methode mit dem Wert 17 aufrufeneco (wie im vorigen Code-Snippet), daher darf der Code in meiner Methode das nicht annehmeneco hält eine legaleColour Wert. Ich muss es explizit testen und mit den außergewöhnlichen Werten umgehen, wie es mir gefällt. Warum ist das?

Meiner bescheidenen Meinung nach wäre es viel schöner, wenn der Compiler eine Fehlermeldung (oder sogar eine Warnung) ausgeben würde, wenn er einen Wert außerhalb des gültigen Bereichs auswirftint In einenumwenn dieint Der Wert ist zur Kompilierungszeit bekannt. Wenn nicht, sollte die Laufzeit eine Ausnahme bei der Zuweisungsanweisung auslösen.

Was denkst du? Gibt es einen Grund, warum das so ist?

(Hinweis. Dies ist eine FrageIch habe vor Ewigkeiten auf meinem Blog gepostet habe aber keine aussagekräftige antwort bekommen.)

Antworten auf die Frage(12)

Ihre Antwort auf die Frage