我已经从cpp来源获得了给定条件。
if (!(faces & activeFace) || [...]) { ... }
我想将其翻译成C#。
当我了解这项权利时,其含义就和
if activeFace is *not* in faces then...
一样多-不是吗?那么C#中的等效内容是什么?
注意:我不能使用
faces.HasFlag(activeFace)
好吧应该是
if ((faces & activeFace) == 0 || [...]) { ... }
我说的对吗?
为了完整起见,实际的Flag枚举
[Flags]
enum Face {
North = 1,
East = 2,
South = 4,
West = 8,
Top = 16,
Bottom = 32
};
嗯,在cpp中是一样的,只需要在C#中添加
[Flags]
属性 最佳答案
我会在枚举中添加一个值None = 0
[Flags]
enum Face {
None = 0,
North = 1,
East = 2,
South = 4,
West = 8,
Top = 16,
Bottom = 32
};
然后测试
if ((faces & activeFace) == Face.None || otherExpr) {
...
}
向枚举添加
0
常量的一个很好的理由是,默认情况下将类字段清零,而省略0
常量将导致枚举值不对应于任何枚举常量。在C#中这样做是合法的,但这不是一个好习惯。 C#不会测试分配给枚举的值是否为有效的枚举常量。但是,如果您无法更改枚举,则可以将枚举值转换为
int
if ((int)(faces & activeFace) == 0 || otherExpr) {
...
}
是的,在C++中,任何
int
不相等的0
都被视为 bool true
值,因此C++中的!(faces & activeFace)
表示:activeFace在脸上是而不是关于c# - 将按位比较从C++转换为C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25126285/