在C#中,表示AND NOT运算符的正确方式是什么?

19 浏览
0 Comments

在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日
0
0 Comments

它们都是不同的逻辑和运算符。 && 是逻辑和运算符,而 & 对于整型类型计算其操作数的逻辑位与。对于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的值会增加,因为没有应用短路。

我认为在这里使用&&更为合适,因为它使代码更易于理解,并且具有短路效应。

0