C# LINQ查询错误:运算符&不能应用于byte或bool
我有下面的linq查询,其中我试图从数据库中获取特定id的记录。然后我遍历这些记录,试图找到一个字节中设置了位的记录。但我得到的错误是“运算符&不能应用于byte或bool”:C# LINQ查询错误:运算符&不能应用于byte或bool,c#,linq,and-operator,C#,Linq,And Operator,我有下面的linq查询,其中我试图从数据库中获取特定id的记录。然后我遍历这些记录,试图找到一个字节中设置了位的记录。但我得到的错误是“运算符&不能应用于byte或bool”: Byte firstPacketMask = Convert.ToByte("00001000", 2); using (aContext _db = new aContext()) { var query = (from data in _d
Byte firstPacketMask = Convert.ToByte("00001000", 2);
using (aContext _db = new aContext())
{
var query = (from data in _db.Datas
where data.id == id
orderby data.ServerTime descending //put the last cycle on top of list
select data).ToList();
var mid = query.Where(x => x.Data[0] & firstPacketMask == 16)
.FirstOrDefault();
}
这里的数据是一个字节数组。数据的第一个字节有位字段。我试图检查是否设置了位4,然后选择该数据包。,因此编译器将您的表达式解析为x.Data[0]&firstPacketMask==16
添加括号以澄清优先顺序:
(x.Data[0] & firstPacketMask) == 16
注意:看起来firstPacketMask等于8,所以将其与x.Data[0]相加将得到0或8,而不是16。也许你是想写信
Byte firstPacketMask = Convert.ToByte("00010000", 2); // bit 4 is set
或者只是
(x.Data[0] & 16) == 16
你实际上要做的是检查firstPacketMask是否等于16,我想这不是你想要的运算符返回true/false作为结果,然后将其放在x.Data[0]对象上,从而导致错误。如上所述-注意正确的括号。谢谢!是的,这就是问题所在。