Ini adalah bug yang dapat Anda gunakan 0.0. Kompilator secara implisit memperlakukan semua ekspresi konstan dengan nilai nol hanya sebagai 0.
Sekarang, sudah benar bagi kompilator untuk mengizinkan konversi implisit dari intekspresi konstan 0 ke enum sesuai dengan bagian 6.1.3 spesifikasi C # 5:
Konversi enumerasi implisit memungkinkan desimal-integer-literal 0 untuk dikonversi ke jenis enum dan ke jenis nullable apa pun yang jenis dasarnya adalah jenis enum. Dalam kasus terakhir, konversi dievaluasi dengan mengubah ke tipe enum yang mendasarinya dan membungkus hasilnya (§4.1.10).
Saya telah berbicara dengan tim C # tentang ini sebelumnya: mereka ingin menghapus konversi yang tidak disengaja dari 0,0 (dan memang 0,0m dan 0,0f) menjadi nilai enum, tapi sayangnya saya mengumpulkannya terlalu banyak merusak kode - meskipun itu seharusnya tidak pernah diizinkan sejak awal.
Mono mcscompiler melarang semua ini konversi floating point, meskipun tidak memungkinkan:
const int Zero = 0;
...
SomeEnum x = Zero;
meskipun faktanya itu Zeroadalah ekspresi konstan tetapi bukan desimal-integer-literal.
Saya tidak akan terkejut melihat spesifikasi C # berubah di masa depan untuk memungkinkan ekspresi konstan integer dengan nilai 0 (yaitu untuk meniru mcs), tetapi saya tidak akan mengharapkan konversi floating point secara resmi benar. (Saya pernah salah sebelumnya tentang memprediksi masa depan C #, tentu saja ...)
1.0literal ke enum khusus.