2012-02-07 30 views
6

Trong C#, làm cờ enum phải được tuần tự? hoặc bạn có thể để lại những khoảng trống? và vẫn thực hiện so sánh bit-khôn ngoan? tức là, bạn có thể làm như sau:Cờ C# enum phải là tuần tự

[Flags] 
public enum MyEnum 
{ 
    None = 0, 
    IsStarred = 1, 
    IsDone = 128 
} 
+1

Trông hoàn hảo với tôi. – Marlon

+10

Trình biên dịch của bạn cho bạn biết điều gì? – yoozer8

Trả lời

5

Không có gì sai với mã bạn đã đăng. Đây là hoàn toàn tốt:

[Flags] 
public enum MyEnum 
{ 
    None = 0, 
    IsStarred = 1, 
    IsDone = 128 
} 

Và như vậy là thế này:

[Flags] 
public enum MyEnum 
{ 
    IsStarred = 1, 
    IsDone = 128 
    None = 0, 
    SomethingElse = 4, 
} 

Chỉ cần nhớ rằng FlagsAttribute không thực thi các giá trị của bạn sẽ được mặt nạ bit.

+0

Trong thực tế, không có gì cản trở bạn chỉ định giá trị enum không xác định (dưới dạng số nguyên) cho biến enum. – Oded

+0

Và bạn vẫn có thể thực hiện các hoạt động bit-khôn ngoan trên chúng không có vấn đề gì phải không? –

7

Không có thứ gì yêu cầu chúng được tuần tự.

Định nghĩa enum của bạn là tốt và sẽ biên dịch mà không có vấn đề.

Vấn đề dễ đọc và nguyên tắc gây ngạc nhiên nhất, tuy nhiên đã bị xâm phạm ...

4

Không yêu cầu như vậy. Những gì bạn có là tốt, giả sử bạn viết hoa [Flags].

3

Có, bạn có thể làm điều đó. Tuỳ bạn.

4

Chúng không phải là tuần tự.

1

Không, chúng không phải là tuần tự. Biên dịch mã của bạn và xem nó cho chính mình

1

Không chỉ bạn có thể làm điều đó, nhưng bạn cũng có thể làm điều này:

public enum MyEnum 
{ 
    None, 
    IsStarred, 
    IsDone = 128 
} 

hoặc

public enum MyEnum 
{ 
    None = 5, 
    IsStarred, 
    IsDone = 128 
} 

đây là một liên kết đến các ví dụ khác: http://www.dotnetperls.com/enum

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