C'est un bug que vous pouvez utiliser 0.0. Le compilateur implicitement traite toutes les expressions constantes avec une valeur de zéro que seulement 0.
Maintenant, c'est correct pour le compilateur pour permettre une conversion implicite d'une constante int
de l'expression de 0 à votre enum conformément à l'article 6.1.3 de la C# 5 spécifications:
Une énumération implicite de conversion permet à la décimale d'un entier littéral de 0 à être convertis à tout enum type et de toute nullable-type dont le type sous-jacent est un enum type. Dans ce dernier cas, la conversion est évaluée par la conversion de la sous-enum type et de l'envelopper dans la suite (§4.1.10).
J'ai parlé avec le C# de l'équipe à ce sujet avant: ils aurais aimé avoir enlevé le accidentel de conversion de 0.0 (et en effet 0.0 m 0.0 f) pour les valeurs de l'enum, mais malheureusement, je le comprends cassé trop de code - même si elle ne doit jamais avoir été admis à la première place.
Le Mono mcs
compilateur interdit tout flottement de ces conversions, bien qu'il ne le permettent:
const int Zero = 0;
...
SomeEnum x = Zero;
malgré le fait qu' Zero
est une expression constante, mais pas une décimale d'un entier littéral.
Je ne serais pas surpris de voir la spécification C# changer à l'avenir pour permettre à un nombre entier d'expression constante avec une valeur de 0 (c'est à dire à imiter mcs
), mais je ne m'attends pas à virgule flottante, les conversions à jamais officiellement être correct. (J'ai été mal, avant de prédire l'avenir de C#, bien sûr...)