问题描述
我是初学者,所以请放轻松。
我写了这段代码:((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'
解决方法
运算符“^”不能应用于“long”和“bool”类型的操作数
像 >
这样的比较运算符比按位/逻辑运算符具有更高的优先级。这有助于以下表达式:
if(a == b && c > d)
如果逻辑具有更高的优先级,则需要更多的括号才能让 c# 以正确的顺序做事
你的表情像
a ^ b > c
但是,需要在 a^b 周围加上括号,否则 c# 将首先执行 b>c 生成一本书,然后尝试与 a
(你的长)进行异或运算
这可能是您的括号 - 导致编译器在按位运算之前首先将 byteFlags > 0
评估为 bool
。你可以试试吗:
(((x.Tags ?? 0) & byteFlags) ^ (byteFlags)) > 0)