2016-05-19 69 views
1

爲什麼有些值在方括號拿什麼1 < < 1:Enum類的方括號

public enum PrivilegeFlags : int 
{ 
    None = 0, 
    [EnumMember(Value = "Agent")] 
    Agent = 1 << 0, 
    [EnumMember(Value = "Campaign")] 
    Campaign = 1 << 1, 
    [EnumMember(Value = "BlackList")] 
    BlackList= 1 << 2, 
All = (1 << 3) - 1 
} 

感謝。

+0

第二個問題是http://stackoverflow.com/questions/2493517/what-do-two-left-angle-brackets-mean-in-c – StuperUser

回答

2

方括號表示這是一個attribute,在這種情況下,具體是EnumMemberAttribute。另外,<<代表左移。

1

看起來像Enum是爲了創建標誌。你可以更清楚地看到它,如果你的枚舉值轉換成二進制:

public enum PrivilegeFlags : int 
{ 
    None = 0, //0000 0000 
    [EnumMember(Value = "Agent")] 
    Agent = 1 << 0, //0000 0001 
    [EnumMember(Value = "Campaign")] 
    Campaign = 1 << 1, //0000 0010 
    [EnumMember(Value = "BlackList")] 
    BlackList= 1 << 2, //0000 0100 
    All = (1 << 3) - 1 //0000 0111 
} 

EnumMember是分配給PrivilegeFlagsenum成員的屬性。

你並不需要聲明enum爲以下所示。相當於枚舉:

public enum PrivilegeFlags : int 
{ 
    None = 0, //0000 0000 
    [EnumMember(Value = "Agent")] 
    Agent = 1, //0000 0001 
    [EnumMember(Value = "Campaign")] 
    Campaign = 2, //0000 0010 
    [EnumMember(Value = "BlackList")] 
    BlackList= 4, //0000 0100 
    All = 7 //0000 0111 
} 

1 << 1意味着你有1價值,你做的1二進制左移位到1值。可以清楚地看出在二進制電平:

0000 0001 //1 in binary 
--------- << 1 shift left by 1 
0000 0010 //note the binary shift, now this is actually 2 

使用指定的左移<<的好處是使具有遞增號碼的標誌創建:代替的2^n0圖案具有數0, 1, 2, 3, 4, ...等: 0, 1, 2, 4, 8, ...