在C#中表达AND NOT运算符的正确方法是什么?

时间:2017-03-17 04:18:43

标签: c# operators

一位同事和我讨论了用什么样的风格来表达C#中的AND NOT条件。虽然这两种方法都有效,但我们不同意运营商的风格。

他说&& !是首选的方式。例如:

db.Widget.Where(w => w.Name == "Foo" && !w.IsBlue);

我说那会奏效,但&!将工作。例如:

db.Widget.Where(w => w.Name == "Foo" &! w.IsBlue);

我曾经有一本关于C#风格的书,但是不记得看到这个。 SO有什么用?

1 个答案:

答案 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的值会增加。

在我看来使用&&这里更合适,因为它使代码更容易理解以及短路。