我在使用 Flag 枚举时遇到一些问题。
我的枚举如下(我声明了 Flags 属性):
[Flags]
public enum Categ
{
None = 0,
Doors = 1,
Views = 2,
Rooms = 3,
Spaces = 4
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在代码中使用它时,似乎不是附加最后一个值,而是替换第一个值:
var category = Categ.Doors | Categ.Rooms;
//category is always equal to Rooms only
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?我是标志新手,所以也许我跳过了一些步骤。非常感谢!
Dav*_*idG 10
除了影响工作方式之外,添加[Flags]属性实际上不会对枚举执行任何操作.ToString()。您仍然需要为每个元素使用 2 的幂的值:
[Flags]
public enum Categ
{
None = 0,
Doors = 1,
Views = 2,
Rooms = 4,
Spaces = 8
// then 16, 32, 64 etc.
}
Run Code Online (Sandbox Code Playgroud)
正如@DavidG 所指出的,这些值必须是 2 的幂。确保这一点的其他选项是......
使用位移位:
[Flags]
public enum Categ
{
None = 0,
Doors = 1 << 0,
Views = 1 << 1,
Rooms = 1 << 2,
Spaces = 1 << 3
}
Run Code Online (Sandbox Code Playgroud)
或者,从 C# 7.0 开始,使用二进制文字:
[Flags]
public enum Categ
{
None = 0b0000,
Doors = 0b0001,
Views = 0b0010,
Rooms = 0b0100,
Spaces = 0b1000
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |