C#中的整数到枚举的类型强制转换
C#中的整数到枚举的类型强制转换
这个问题已经有答案了:
我有一个带有一些停用值的enum
类型,当我尝试将一个int
值强制转换为enum
类型时,它会返回多个用|
运算符分隔的enum
值。有人能解释一下这种转换的逻辑吗?
enum EnumTest { Test1 = 0, Test2 = 1, Test3 = 1 << 1, Test4 = 1 << 2, Test5 = 1 << 12, Test6 = 1 << 13, Test7 = 1 << 20, Test8 = 1 << 22, Test9 = 1 << 23, Test10 = 1 << 24, Test11 = 1 << 25, Test12 = 1 << 14, Test13 = 1 << 15, Test14 = 1 << 16, Test15 = 1 << 25, Test16 = 1 << 17, Test17 = 1 << 18, Test18 = 1 << 19, Test19 = 1 << 21, Test20 = 1 << 26 } public void method1() { int number=67239937; EnumTest e = (EnumTest)number; //output: Test2|Test16|Test20 }
admin 更改状态以发布 2023年5月25日
\n\n假设你的enum如下:\n
enum E { A = 1 B = 2 C = 4 D = 8 }
\n如果你把每个值转换成二进制,你会得到:\n
A = 0001 B = 0010 C = 0100 D = 1000
\n\n现在假设你想把二进制数1100,即十进制数为12,转换成这个enum:\n
E enumTest = (E)12;
\n它会输出C|D\n其中,|表示OR运算符,C|D表示0100 OR 1000,结果为1100,即十进制数为12。\n\n在你的情况下,你要找的是哪个enum组合等于67239937。这个数转换成二进制是100000000100000000000000001。然后它转换成Test2|Test16|Test20或1|(1<<17)|(1<<26)。