To błąd, którego możesz użyć 0.0. Kompilator niejawnie traktuje wszystkie wyrażenia stałe o wartości zero jako po prostu 0.
Teraz jest poprawna dla kompilatora, aby umożliwić niejawna konwersja od stałej intekspresji od 0 do wyliczenia zgodnie z sekcją 6.1.3 C # 5 specyfikacji:
Niejawna konwersja wyliczenia umożliwia konwersję dziesiętnej liczby całkowitej literału 0 na dowolny typ wyliczeniowy i na dowolny typ dopuszczający wartość null, którego typem bazowym jest typ wyliczeniowy. W tym drugim przypadku konwersja jest oceniana przez konwersję na podstawowy typ wyliczeniowy i zawijanie wyniku (§4.1.10).
Rozmawiałem o tym wcześniej z zespołem C #: chcieliby usunąć przypadkową konwersję z wartości 0,0 (a nawet 0,0 mi 0,0f) na wartości wyliczeniowe, ale niestety, jak rozumiem, zepsuło to zbyt dużo kodu - mimo że Przede wszystkim nigdy nie powinno było na to pozwolić.
Mono mcskompilator zabrania wszystkich tych pływających konwersji punktów, choć nie pozwalają:
const int Zero = 0;
...
SomeEnum x = Zero;
pomimo faktu, że Zerojest to wyrażenie stałe, ale nie literał dziesiętny.
Nie zdziwiłbym się, gdyby w przyszłości zmiana specyfikacji C # pozwoliła na dowolne wyrażenie będące liczbą całkowitą o wartości 0 (tj. Naśladowanie mcs), ale nie spodziewałbym się, że konwersje zmiennoprzecinkowe kiedykolwiek będą oficjalnie poprawne. (Myliłem się wcześniej, przewidując przyszłość języka C #, oczywiście ...)
1.0dosłownego do niestandardowego wyliczenia.