C#中的整数到枚举的类型强制转换

28 浏览
0 Comments

C#中的整数到枚举的类型强制转换

这个问题已经有答案了:

什么是C#中[Flags]的枚举属性的含义?

我有一个带有一些停用值的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日
0
0 Comments

\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)。

0