Gil*_*tal 23 c# enums flags bit-manipulation
有没有办法在枚举中添加"所有值"选项而不必在每次将新值添加到枚举时更改其值?
[Flags]
public enum SomeEnum
{
SomeValue = 1,
SomeValue2 = 1 << 1,
SomeValue3 = 1 << 2,
SomeValue4 = 1 << 3,
All = ?
}
Run Code Online (Sandbox Code Playgroud)
更新:
结束从long继承并使用long.MaxValuefor All选项.
And*_*ren 35
因为您应该在标志枚举中定义空值,例如None = 0定义All值的最简单方法是简单地反转所有位None.
[Flags]
enum MyEnum
{
None = 0,
A = 1
B = 2,
C = 4,
...
All = ~None
}
Run Code Online (Sandbox Code Playgroud)
请注意,~0而不是~None将不无符号后盾类型的工作,因为这是-1,这不是无符号的有效值
编辑:修改了答案以使用反转的None而不是显式常量,例如0x7FFFFFFF或~0,因为这也适用于unsigned
Dmi*_*lov 14
它应该是这样的:
[Flags]
public enum SomeEnum
{
SomeValue = 1,
SomeValue2 = 1 << 1,
SomeValue3 = 1 << 2,
SomeValue4 = 1 << 3,
All = SomeValue | SomeValue2 | SomeValue3 | SomeValue4
}
Run Code Online (Sandbox Code Playgroud)
枚举可以由许多不同长度的整数类型(short、int、long)组成。这使得#FFFFFFFF解决方案不合适(如@MarcGravell 评论中指出的那样)。
枚举可以由无符号类型组成(对于 isntance 为 uint)。这使得-1解决方案不合适。
我最好的选择是免维护:
All = ~0
Run Code Online (Sandbox Code Playgroud)