C # enum - Warum funktioniert * implizites * Casting von 0? [Duplikat]

8

Nimm dieses bisschen Code:

%Vor%

Natürlich schlägt es fehl, wenn 1 einer enum -Typ-Variable zugewiesen wird. (Schlag eine explizite Besetzung und es wird funktionieren.)

Meine Frage ist: Warum scheitert es NICHT bei der Zuweisung von 0?

    
Cristi Diaconescu 06.06.2013, 11:00
quelle

2 Antworten

9

Es ist so, weil das die Spezifikation sagt ...

Dies ist ein weiterer Grund, warum es immer eine gute Idee ist, all Ihren Enums ein Element mit dem Wert 0 zu geben, weil Sie sie manchmal mit diesem Wert erhalten.

Der entsprechende Abschnitt in der C # -Sprachspezifikation 6.1.3:

  

6.1.3 Implizite Aufzählungskonvertierungen

     

Bei einer impliziten Enumerationskonvertierung kann das Dezimal-Ganzzahl-Literal 0 in einen beliebigen Enum-Typ und in einen beliebigen NULL-Typ konvertiert werden, dessen zugrunde liegender Typ ein Enum-Typ ist. Im letzteren Fall wird die Konvertierung ausgewertet, indem in den zugrunde liegenden Enum-Typ konvertiert und das Ergebnis umschlossen wird (§ 4.1.10).

Was warum so ist - nun, ich schätze, nur jemand im Sprachkomitee, der über diese Dinge entscheidet, würde es wissen.

Tatsächlich haben wir so etwas, wenn Sie sich den Kommentar von Rawling zur ursprünglichen Frage ansehen.

    
Matthew Watson 06.06.2013, 11:03
quelle
1

Der Grund, warum Sie 0 nur implizit verwenden können, ist, dass 0 immer ein gültiger enum -Typ ist, wobei 1,2,3 oder eine andere Zahl nicht unbedingt ein gültiger Typ sein muss. Zum Beispiel versuchen Sie dies

%Vor%

0 ist immer noch ein gültiger enum -Typ, weil 0 der Standardwert ist, egal was Sie tun. Das heißt, wenn Sie nicht zulassen, dass einer Ihrer Werte gleich 0 ist, wird für Sie ein Typ 0 enum generiert.

    
CodeCamper 06.06.2013 11:11
quelle

Tags und Links