2009-03-06 29 views

Trả lời

20

Trong C#, không giống Java, enums không được chọn. Bạn có thể có bất kỳ giá trị nào của loại cơ bản. Đây là lý do tại sao nó khá quan trọng để kiểm tra đầu vào của bạn.

if(!Enum.IsDefined(typeof(MyEnum), value)) 
    throw new ArgumentOutOfRangeException(); 
+1

Có một số tính năng của C# mà tôi muốn làm nhà phát triển Java (LINQ!), Nhưng ở đây Java thực sự đã đúng ... –

+0

@saua: Không nhất thiết. Họ là những lợi thế cho cách tiếp cận này, cũng như bất lợi. –

+0

Ưu điểm chính của điểm này là bạn có thể kết hợp các giá trị mà bạn cũng nên đánh dấu bằng thuộc tính [Flags]. –

1

Vì enum của bạn dựa trên int, nó có thể chấp nhận bất kỳ giá trị nào có thể. Và kể từ khi bạn đang nói cho trình biên dịch một cách rõ ràng (bằng cách đúc) rằng nó là ok để đúc 4 vào enum của bạn nó làm như vậy.

1

Mỗi enum có một loại số cơ bản (ví dụ: int) được sử dụng để trình bày. Ngay cả khi một giá trị không có một tên, đó là một giá trị có thể enum có thể có.

1

Những gì người khác không nói: Với tính năng truyền, bạn thông báo cho trình biên dịch biết bạn đang làm gì. Vì vậy, nếu bạn nói với nó, hãy coi đây là một giá trị enum. Các áp phích khác chỉ ra lý do tại sao điều này vẫn được cho phép, vì trình biên dịch C# không cho phép nhiều điều xấu, ngay cả khi bạn nói bạn biết những gì bạn đang làm.

Sẽ rất tệ nếu giá trị không được phép, vì sau đó bạn không thể lưu giá trị cờ làm int. Hoặc, ai đó đã phải kiểm tra xem int là một trong những kết hợp được phép, có thể rất nhiều nếu bạn sử dụng một enum cờ (với các giá trị có thể được or'ed với nhau).

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