0.0'ı kullanabileceğiniz bir hatadır. Derleyici, sıfır değerine sahip tüm sabit ifadeleri örtük olarak sadece 0 olarak ele alır.
Şimdi, derleyicinin C # 5 belirtiminin 6.1.3 bölümüne göre sabit bir 0 ifadesinden sizin numaranıza örtük bir dönüşüme izin vermesi doğrudurint :
Örtülü bir numaralandırma dönüşümü, ondalık tamsayı-değişmez 0'ın herhangi bir enum türüne ve temel alınan türü bir enum türü olan herhangi bir null yapılabilir türe dönüştürülmesine izin verir. İkinci durumda, dönüştürme, temeldeki enum türüne dönüştürülerek ve sonucu sararak değerlendirilir (§4.1.10).
C # ekibiyle daha önce bunun hakkında konuştum: Yanlışlıkla 0,0 (ve aslında 0,0 m ve 0,0f) değerlerinden enum değerlerine dönüştürmeyi kaldırmayı çok isterdi , ancak ne yazık ki çok fazla kod kırdığını anladım - ilk etapta asla izin verilmemeliydi.
Mono mcsderleyici , aşağıdakilere izin vermesine rağmen, tüm bu kayan nokta dönüşümlerini yasaklar :
const int Zero = 0;
...
SomeEnum x = Zero;
gerçeğine rağmen Zerosabit ifadesidir ama değil ondalık tamsayı .
Gelecekte 0 değerine sahip herhangi bir tamsayı sabit ifadesine izin vermek için (yani taklit etmek için mcs) C # spesifikasyonunun değiştiğini görmek beni şaşırtmaz , ancak kayan nokta dönüşümlerinin resmi olarak doğru olmasını beklemem . (Daha önce C # 'ın geleceğini tahmin etme konusunda yanılmışım elbette ...)
1.0değişmezi için özel numaralandırma.