在C#中,表示AND NOT运算符的正确方式是什么?
在C#中,表示AND NOT运算符的正确方式是什么?
这个问题已经在这里有答案了:
我的一个同事和我讨论了在C#中表达AND NOT条件所使用的风格。虽然两种方法都能工作,但我们对运算符的风格有所不同。
他说 && ! 是首选方式。例如:
db.Widget.Where(w => w.Name == "Foo" && !w.IsBlue);
我说那样也行,但是 &! 也可以。例如:
db.Widget.Where(w => w.Name == "Foo" &! w.IsBlue);
我曾经有一本关于C#风格的书,但是不记得是否涵盖了这个问题。SO使用什么?
admin 更改状态以发布 2023年5月23日
它们都是不同的逻辑和运算符。 && 是逻辑和运算符,而 & 对于整型类型计算其操作数的逻辑位与。对于bool操作数,&计算其操作数的逻辑AND,参考。一个区别是&&
将短路,而&
不会。
在这种特殊情况下,逻辑与更易于理解,因为它最常用于逻辑与。如前所述,&&将短路,例如,如果&&
在条件语句中得到false,则右侧的进一步条件将不会被评估,但&
不会短路。请参见下面给出的示例。
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
在上面的例子中使用&&
,如果a
不是1,则不会评估其余的条件,这不是按位&
的情况。由于&&的短路效应,b不会增加,但是用&时,b的值会增加,因为没有应用短路。
我认为在这里使用&&更为合适,因为它使代码更易于理解,并且具有短路效应。