前段時間,由於在項目中不小心把同一個枚舉中的兩個不同項寫成了同一個值,項目編譯正常。如下:
enum MyEnum
{
A = 1,
B = 1
}
好奇之下寫了代碼進行驗證:
enum MyEnum
{
A,
B = 2,
C,
D = 2,
E,
F = 1,
G
}
竟然發現:
第一點:
int a = (int)MyEnum.A; // a = 0
int c = (int)MyEnum.C; // c = 3
int e = (int)MyEnum.E; // e = 3
int g = (int)MyEnum.G; // g = 2
(1)、如果第一項沒指定值,默認為0。
(2)、項的值在枚舉中不一定唯一。
(2)、如果沒指定項的值,後面項的值“總是”(不因任何原因,如已經存在值)等於前面項的值加1。
(3)、枚舉的項不一定是從前到後按小到大排序的。
第二點:
bool result1 = (MyEnum.C == MyEnum.E); // true
bool result2 = (MyEnum.B == MyEnum.G); // true
MyEnum myE = (MyEnum)2; // MyEnum.B
(1)、枚舉是值類型,在運算時都是用“值”來做運算的。
(2)、當值轉換成枚舉時,從前到後搜索。
寫得不好多見諒,歡迎指正及指教。