È un bug che puoi usare 0.0. Il compilatore tratta implicitamente tutte le espressioni costanti con un valore zero come solo 0.
Ora, è corretto che il compilatore consenta una conversione implicita da intun'espressione costante di 0 alla tua enum secondo la sezione 6.1.3 della specifica C # 5:
Una conversione di enumerazione implicita consente di convertire il valore letterale intero decimale 0 in qualsiasi tipo enum e in qualsiasi tipo nullable il cui tipo sottostante è un tipo enum. In quest'ultimo caso la conversione viene valutata convertendola nel sottostante tipo enum e avvolgendo il risultato (§4.1.10).
Ne ho già parlato con il team C #: avrebbero voluto rimuovere la conversione accidentale da 0.0 (e in effetti 0.0m e 0.0f) ai valori enum, ma sfortunatamente ho capito che ha rotto troppo codice, anche se in primo luogo non avrebbe mai dovuto essere consentito.
Mono mcscompilatore vieta tutte queste conversioni virgola mobile, anche se non permette:
const int Zero = 0;
...
SomeEnum x = Zero;
nonostante Zerosia un'espressione costante ma non un numero intero decimale letterale.
Non sarei sorpreso di vedere la modifica della specifica C # in futuro per consentire qualsiasi espressione costante intera con un valore di 0 (cioè per imitare mcs), ma non mi aspetto che le conversioni in virgola mobile siano mai ufficialmente corrette. (Mi sono sbagliato prima sulla previsione del futuro di C #, ovviamente ...)
1.0letterale all'enumerazione personalizzata.