Это ошибка, которую вы можете использовать в 0.0. Компилятор неявно обрабатывает все константные выражения с нулевым значением как просто 0.
Теперь, это правильно для компилятора , чтобы неявное преобразование из постоянного intвыражения 0 до вашего перечисления согласно разделу 6.1.3 C # 5 спецификации:
Неявное преобразование перечисления позволяет преобразовать десятично-целочисленный литерал 0 в любой перечисляемый тип и в любой обнуляемый тип, базовым типом которого является перечисляемый тип. В последнем случае преобразование оценивается путем преобразования в базовый enum-type и упаковки результата (§4.1.10).
Я уже говорил об этом с командой C # раньше: они хотели бы удалить случайное преобразование из 0,0 (и действительно 0,0 м и 0,0f) в значения перечисления, но, к сожалению, я понимаю, что это сломало слишком много кода - хотя это вообще никогда не должно было быть разрешено.
Mono mcsкомпилятор запрещает все эти преобразования с плавающей точкой, хотя это позволит:
const int Zero = 0;
...
SomeEnum x = Zero;
несмотря на то, что Zeroэто постоянное выражение, а не десятично-целочисленный литерал.
Я не удивлюсь, если в будущем спецификация C # изменится, чтобы разрешить любое целочисленное постоянное выражение со значением 0 (то есть имитировать mcs), но я не ожидал бы, что преобразования с плавающей запятой когда-либо будут официально правильными. (Я, конечно, ошибался, предсказывая будущее C # ...)
1.0литерал настраиваемому перечислению.