Đó là một lỗi mà bạn có thể sử dụng 0.0. Trình biên dịch xử lý ngầm tất cả các biểu thức hằng có giá trị bằng 0 chỉ bằng 0.
Bây giờ, nó là đúng cho trình biên dịch cho phép một chuyển đổi ngầm từ một hằng số intbiểu hiện của từ 0 đến enum của bạn theo mục 6.1.3 của 5 đặc điểm kỹ thuật C #:
Một chuyển đổi kiểu liệt kê ngầm cho phép chuyển đổi số thập phân-số nguyên-chữ 0 thành bất kỳ kiểu enum nào và thành bất kỳ kiểu nullable nào có kiểu cơ bản là kiểu enum. Trong trường hợp thứ hai, chuyển đổi được đánh giá bằng cách chuyển đổi thành kiểu enum bên dưới và bao bọc kết quả (§4.1.10).
Tôi đã nói chuyện với nhóm C # về điều này trước đây: họ muốn loại bỏ chuyển đổi ngẫu nhiên từ giá trị 0,0 (và thực tế là 0,0m và 0,0f) thành giá trị enum, nhưng thật không may, tôi thu thập nó đã làm hỏng quá nhiều mã - mặc dù nó không bao giờ được cho phép ngay từ đầu.
Mono mcsbiên dịch cấm tất cả các chuyển đổi dấu chấm động, mặc dù nó không cho phép:
const int Zero = 0;
...
SomeEnum x = Zero;
mặc dù thực tế đó Zerolà một biểu thức hằng nhưng không phải là một chữ số thập phân-số nguyên.
Tôi sẽ không ngạc nhiên khi thấy đặc điểm kỹ thuật C # thay đổi trong tương lai để cho phép bất kỳ biểu thức hằng số nguyên nào có giá trị 0 (tức là bắt chước mcs), nhưng tôi sẽ không mong đợi các chuyển đổi dấu phẩy động sẽ chính thức đúng. (Tất nhiên, tôi đã sai trước đây khi dự đoán tương lai của C # ...)
1.0chữ cho enum tùy chỉnh.