【发布时间】:2017-10-08 21:27:12
【问题描述】:
我有一个 enum 类型,每个 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
}
【问题讨论】:
-
该问题不是直接欺骗,但当前接受的答案涵盖了您的问题。
-
演员阵容所涉及的“逻辑”,顺便说一句,很简单——没有逻辑。
e在封面下具有67239937的值。枚举标签的实际映射与编译器无关——枚举实际上只是整数。当值被其他代码片段解释时,标签开始发挥作用。