【发布时间】:2011-10-17 10:19:15
【问题描述】:
我想做这样的事情,但我做不到:
[Flags]
enum SomeEnum : int
{
None = 0,
A,
B,
C
}
SomeEnum en = SomeEnum.A;
en <<= 1; //Expect en == SomeEnum.B but I recieve an error here
为了什么?
【问题讨论】:
-
可能是因为这增加了编译器的复杂性,但在考虑测试、文档等时几乎没有什么好处。
-
这看起来会让事情变得更难阅读。你能举个例子说明你什么时候想做这样的事情吗?
-
您可以在执行任何永远不会在枚举上使用的逻辑之前将枚举转换为 int,因为枚举根本不适合。无论如何:en = (SomeEnum)((int)en
-
不允许这样做的一个原因是移位操作理论上可能会生成一个对枚举无效的值。除了
标签: c# .net enums enum-flags