Es un error que puedes usar 0.0. El compilador trata implícitamente todas las expresiones constantes con un valor de cero como solo 0.
Ahora, es correcto que el compilador permita una conversión implícita de una intexpresión constante de 0 a su enumeración según la sección 6.1.3 de la especificación C # 5:
Una conversión de enumeración implícita permite convertir el decimal-integer-literal 0 en cualquier tipo de enumeración y en cualquier tipo que acepta valores NULL cuyo tipo subyacente es un tipo de enumeración. En el último caso, la conversión se evalúa convirtiendo al tipo enum subyacente y envolviendo el resultado (§4.1.10).
Hablé con el equipo de C # sobre esto antes: les hubiera gustado haber eliminado la conversión accidental de 0.0 (y de hecho 0.0my 0.0f) a los valores de enumeración, pero desafortunadamente deduzco que rompió demasiado código, aunque en primer lugar, nunca debería haberse permitido.
El Mono mcscompilador prohíbe todas estas conversiones de punto flotante, aunque no permite:
const int Zero = 0;
...
SomeEnum x = Zero;
a pesar de que Zeroes una expresión constante pero no un decimal-entero-literal.
No me sorprendería ver que la especificación de C # cambie en el futuro para permitir cualquier expresión constante entera con un valor de 0 (es decir, para imitar mcs), pero no esperaría que las conversiones de punto flotante fueran oficialmente correctas. (Me he equivocado antes al predecir el futuro de C #, por supuesto ...)
1.0literal a una enumeración personalizada.