一位同事和我讨论了用什么样的风格来表达C#中的AND NOT条件。虽然这两种方法都有效,但我们不同意运营商的风格。
他说&& !是首选的方式。例如:
db.Widget.Where(w => w.Name == "Foo" && !w.IsBlue);
我说那会奏效,但&!将工作。例如:
db.Widget.Where(w => w.Name == "Foo" &! w.IsBlue);
我曾经有一本关于C#风格的书,但是不记得看到这个。 SO有什么用?
答案 0 :(得分:1)
它们都是不同的逻辑和运算符。 &&是逻辑和运算符而&对于整数类型,计算其操作数的逻辑按位AND。对于bool操作数,&计算其操作数reference的逻辑AND。一个区别是&&
会短路,而&
则不会。
在这种特殊情况下,逻辑和更容易理解,因为它最常用于逻辑和。如前所述&&将短路条件,例如如果&&
在条件声明中出现错误,那么右边的其他条件将无法评估,但&不要短路。请参阅下面给出的示例。
int a = 1;
int b = 2;
int c = 3;
bool r = a == 2 && ++b == 2;
Console.WriteLine(b);
r = a == 2 & ++b == 2;
Console.WriteLine(b);
输出
2
3
在上面的示例中,如果&&
不是1,则使用a
,则不会评估剩余条件,这不是按位&
的情况。由于&& amp;的短路b没有增加但是有&由于没有应用短路,b的值会增加。
在我看来使用&&这里更合适,因为它使代码更容易理解以及短路。