Es ist ein Fehler, den Sie 0.0 verwenden können. Der Compiler behandelt implizit alle konstanten Ausdrücke mit dem Wert Null als nur 0.
Nun ist es richtig, dass der Compiler eine implizite Konvertierung von einem konstanten intAusdruck von 0 in Ihre Aufzählung gemäß Abschnitt 6.1.3 der C # 5-Spezifikation zulässt:
Eine implizite Aufzählungskonvertierung ermöglicht die Konvertierung des Dezimal-Ganzzahl-Literal 0 in einen beliebigen Aufzählungstyp und in einen nullbaren Typ, dessen zugrunde liegender Typ ein Aufzählungstyp ist. Im letzteren Fall wird die Konvertierung ausgewertet, indem in den zugrunde liegenden Aufzählungstyp konvertiert und das Ergebnis umbrochen wird (§4.1.10).
Ich habe bereits zuvor mit dem C # -Team darüber gesprochen: Sie hätten gerne die versehentliche Konvertierung von 0.0 (und tatsächlich 0.0m und 0.0f) in Enum-Werte entfernt, aber leider habe ich festgestellt, dass zu viel Code kaputt gegangen ist - obwohl es hätte niemals erlaubt sein dürfen.
Der Mono- mcsCompiler verbietet alle diese Gleitkommakonvertierungen, erlaubt jedoch Folgendes:
const int Zero = 0;
...
SomeEnum x = Zero;
trotz der Tatsache, dass dies Zeroein konstanter Ausdruck ist, aber kein Dezimal-Ganzzahl-Literal.
Es würde mich nicht wundern, wenn sich die C # -Spezifikation in Zukunft ändern würde, um einen ganzzahligen konstanten Ausdruck mit einem Wert von 0 zuzulassen (dh nachzuahmen mcs), aber ich würde nicht erwarten, dass die Gleitkommakonvertierungen jemals offiziell korrekt sind. (Ich habe mich vorher geirrt, die Zukunft von C # vorherzusagen, natürlich ...)
1.0Literal zuweisen können .