为什么在C#中没有为标志枚举实现运算符<<和>>?

Vas*_*sya 1 .net c# enums enum-flags

我想做这样的事,但我不能:

[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
Run Code Online (Sandbox Code Playgroud)

为了做到这一点?

Gaz*_*yer 6

枚举本身不是位字段.枚举的全部意义在于抽象出任何潜在的价值观.使用移位运算符意味着知道这些值是什么.

但是,如果你真的想转移,只需施放:

en = (SomeEnum)((int)en << 1);
Run Code Online (Sandbox Code Playgroud)