boo*_*oop 9 c# bitwise-operators bitwise-and
我是来自cpp源的给定条件.
if (!(faces & activeFace) || [...]) { ... }
Run Code Online (Sandbox Code Playgroud)
我想把它翻译成C#.
当我理解这一点时,这意味着if activeFace is *not* in faces then...- 不是吗?
那么C#中的等价物是什么?
注意:我不能使用faces.HasFlag(activeFace)
那应该是
if ((faces & activeFace) == 0 || [...]) { ... }
Run Code Online (Sandbox Code Playgroud)
我对吗?
为了完整性,这里是实际的标志枚举
[Flags]
enum Face {
North = 1,
East = 2,
South = 4,
West = 8,
Top = 16,
Bottom = 32
};
Run Code Online (Sandbox Code Playgroud)
那么它在cpp中是一样的,你只需要[Flags]在C#中添加一个属性
我会None = 0为枚举添加一个值
[Flags]
enum Face {
None = 0,
North = 1,
East = 2,
South = 4,
West = 8,
Top = 16,
Bottom = 32
};
Run Code Online (Sandbox Code Playgroud)
然后测试
if ((faces & activeFace) == Face.None || otherExpr) {
...
}
Run Code Online (Sandbox Code Playgroud)
0向枚举中添加常量的一个很好的理由是,默认情况下类字段为零,省略0常量会导致枚举值与任何枚举常量不对应.在C#中这样做是合法的,但这不是一个好习惯.C#不测试分配给枚举的值是否是有效的枚举常量.
但是如果你不能改变枚举,你可以将枚举值转换为 int
if ((int)(faces & activeFace) == 0 || otherExpr) {
...
}
Run Code Online (Sandbox Code Playgroud)
是的,在C++中,任何int不等的0都被视为布尔true值,因此!(faces & activeFace)在C++中意味着:activeFace 不在 faces中
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |