如何在 C# 中显示逻辑和之后的异或

How to show logical and after that xor in C#

我是初学者,请放轻松。

我写了这段代码:((x.Tags ?? 0) & byteFlags)) ^ (byteFlags) > 0)
x.tags 是长数据类型
(long)byteFlagEnum.somethings & (long)byteFlagEnum.thing;

有byteFlagEnum结构

public enum HotelBookTag : long
{
    .... = 1 << 0,
    ... = 1 << 1,
    ....  = 1 << 2,
    ..... = 1 << 3,
    thing = 1 << 4,
    somethings = 1 << 5,
}

但它给了我这个错误

Operator '^' cannot be applied to operands of type 'long' and 'bool'

这可能是您的括号 - 导致编译器在按位运算之前首先将 byteFlags > 0 评估为 bool。你能试试吗:

    (((x.Tags ?? 0) & byteFlags) ^ (byteFlags)) > 0)

Operator '^' cannot be applied to operands of type 'long' and 'bool'

> 等比较运算符的优先级高于 bitwise/logical 运算符。这有助于像这样的表达式:

if(a == b && c > d)

如果逻辑具有更高的优先级,则需要更多的括号才能使 c# 以正确的顺序执行操作

你的表情像

a ^ b > c

但是,需要在 a^b 周围加上括号,否则 c# 将执行 b>c 首先生成一本书,然后尝试与 a(您的 long)

进行异或