C'est un bogue que vous pouvez utiliser 0.0. Le compilateur traite implicitement toutes les expressions constantes avec une valeur de zéro comme juste 0.
Maintenant, il est correct que le compilateur autorise une conversion implicite d'une intexpression constante de 0 à votre enum selon la section 6.1.3 de la spécification C # 5:
Une conversion d'énumération implicite permet au décimal-entier-littéral 0 d'être converti en n'importe quel type enum et en n'importe quel type nullable dont le type sous-jacent est un type enum. Dans ce dernier cas, la conversion est évaluée en convertissant au type enum sous-jacent et en encapsulant le résultat (§4.1.10).
J'en ai déjà parlé avec l'équipe C #: ils auraient aimé supprimer la conversion accidentelle de 0,0 (et en fait 0,0 m et 0,0f) en valeurs enum, mais malheureusement, je suppose que cela a cassé trop de code - même si cela n'aurait jamais dû être autorisé en premier lieu.
Le Mono mcscompilateur interdit toutes ces conversions à virgule flottante, même si elle ne permet:
const int Zero = 0;
...
SomeEnum x = Zero;
malgré le fait que ce Zerosoit une expression constante mais pas un entier décimal.
Je ne serais pas surpris de voir la spécification C # changer à l'avenir pour autoriser toute expression constante entière avec une valeur de 0 (c'est-à-dire imiter mcs), mais je ne m'attendrais pas à ce que les conversions en virgule flottante soient officiellement correctes. (Je me suis trompé avant de prédire l'avenir de C #, bien sûr ...)
1.0littéral à une énumération personnalisée.