2010-09-21 37 views
10

Tôi đã dành một thời gian cố gắng hiểu tại sao ứng dụng WPF của tôi không được gắn kết với thuộc tính enum một cách hợp lý và đây là nguyên nhân.Tại sao C# cho phép giá trị enum không hợp lệ

static void Main(string[] args) 
{ 
    MyEnum x = 0; 
    Console.WriteLine(x.ToString()); 
    Console.ReadLine(); 
} 

public enum MyEnum 
{ 
    First = 1, 
    Second = 2 
} 

Về cơ bản vấn đề là không có giá trị mặc định được đặt cho thuộc tính enum trong hàm tạo của lớp tôi đã ràng buộc, vì vậy nó được mặc định bằng không.

Có cách nào tôi có thể nói trình biên dịch C# mà tôi muốn nó chỉ chấp nhận các giá trị hợp lệ (và mặc định là giá trị thấp nhất)? Tôi không muốn tài sản của mình chấp nhận các giá trị không hợp lệ, và tôi không muốn viết mã setter cho mọi thuộc tính sử dụng enum.

Trả lời

10

Không, rất tiếc là không.

C# enums chỉ là số được đặt tên, thực sự - không có xác thực nào cả. Tôi đồng ý nó sẽ rất tốt đẹp để xem điều này, cũng như enums với hành vi (như trong Java). Tôi chưa nghe bất cứ điều gì để đề xuất nó đến bất kỳ thời gian sớm mặc dù: (

Lưu ý rằng giá trị mặc định của một loại sẽ luôn là giá trị đại diện bởi "tất cả các bit không" - không có cách nào nhận được vòng trong Vì vậy, hoặc là bạn cần phải làm cho rằng một giá trị mặc định hợp lý, hoặc bạn phải kiểm tra rõ ràng chống lại nó ngay cả trong một hệ thống xác nhận (như thử nghiệm đối với null cho các loại tài liệu tham khảo). , Tôi tin rằng có những lúc nó có ý nghĩa để có loại "tên cho số" loại ... nhưng tôi nghĩ rằng một tập hợp các giá trị thực sự bị hạn chế sẽ hữu ích hơn nữa.

+1

Chà, cuối cùng tôi đã tìm thấy thứ gì đó mà tôi nghĩ là tốt hơn Delphi hơn trong C# :) –

Các vấn đề liên quan