AM0*_*AM0 0 c# linq and-operator
我有以下linq查询,其中我试图从数据库获取特定id的记录.然后我浏览记录并尝试找到一个字节中的位被设置的记录.但我得到的错误是"运算符&不能应用于字节或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();
}
Run Code Online (Sandbox Code Playgroud)
这里Data是一个字节数组.Data的第一个字节有位字段.我试图检查是否设置了第4位然后我选择了该数据包.
&优先级低于==,因此编译器将表达式解析为x.Data[0] & (firstPacketMask == 16).
添加括号以阐明优先级:
(x.Data[0] & firstPacketMask) == 16
Run Code Online (Sandbox Code Playgroud)
注意:它看起来像firstPacketMask等于8,所以与它相关x.Data[0]将产生0或8,从不16.也许你打算写
Byte firstPacketMask = Convert.ToByte("00010000", 2); // bit 4 is set
Run Code Online (Sandbox Code Playgroud)
或者只是
(x.Data[0] & 16) == 16
Run Code Online (Sandbox Code Playgroud)