public static void Test() { English t = English.A | English.B | English.C; Console.WriteLine((int)(t & English.B)); t &= ~English.B;//去掉B Console.WriteLine((int)(t & English.B)); }public enum English { A, B, C, D, E, F }
写完整给你,再看不懂不解释了。public static void Test() { English t = English.A | English.B | English.C; Console.WriteLine((int)(t & English.B)); t &= ~English.B;//去掉B Console.WriteLine((int)(t & English.B)); }public enum English { A = 1, B = 2, C = 8, D = 16, E = 32, F = 64 }
然后我需要在代码里面修改button的值
将其改成
button = English.A | English.C
这个该怎么做?
加了flag。
但是这种办法不行呢。
button 这个参数的枚举项会有不同的值。
我只能确定有English.B,其他的按照不同的方式会有不同的枚举值
我要说的是button这个变量是有不特定数量的枚举值。可能有3个也可能只有1个。
但是English.B是必然存在的。
现在的需求是在特定的时候将English.B这个值给移除
我要的不是你那个做法!
那样的话我会累死。不同的入口会造成button拥有不同的值。
按照你那样做。我需要根据每个入口写上不同的&代码。你不觉得工作量太大了点??
要知道我的枚举有30多个项呢?!!
就一句代码的:
button = button ^ English.B
{
English t = English.A | English.B | English.C;
Console.WriteLine((int)(t & English.B));
t &= ~English.B;//去掉B
Console.WriteLine((int)(t & English.B));
}public enum English { A, B, C, D, E, F }
枚举加一个全部|或 好的值就可以简化了,^ 是异或,只有你确保button已经有English.B是正确的,如果没有那就反了
不行的
我运行测试了一下
最后得到的t只有一个English.C了,English.A这个值没有了
{
English t = English.A | English.B | English.C;
Console.WriteLine((int)(t & English.B));
t &= ~English.B;//去掉B
Console.WriteLine((int)(t & English.B));
}public enum English
{
A = 1,
B = 2,
C = 8,
D = 16,
E = 32,
F = 64
}
用了下,button &= ~English.B和button = button ^ English.B可以得出相同的结果。
但是button = button ^ English.B会在没有English.B的情况下把English.B给加上。
button &= ~English.B就没有这个问题