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