看起來像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
是分配給PrivilegeFlags
enum
成員的屬性。
你並不需要聲明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^n
和0
圖案具有數0, 1, 2, 3, 4, ...
等: 0, 1, 2, 4, 8, ...
來源
2016-05-19 10:23:51
Ian
第二個問題是http://stackoverflow.com/questions/2493517/what-do-two-left-angle-brackets-mean-in-c – StuperUser