Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# LINQ查询错误:运算符&不能应用于byte或bool_C#_Linq_And Operator - Fatal编程技术网

C# LINQ查询错误:运算符&不能应用于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

我有下面的linq查询,其中我试图从数据库中获取特定id的记录。然后我遍历这些记录,试图找到一个字节中设置了位的记录。但我得到的错误是“运算符&不能应用于byte或bool”:

        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]对象上,从而导致错误。如上所述-注意正确的括号。

谢谢!是的,这就是问题所在。