关于C#:或if语句中的比较顺序


OR Comparison order in if statement

本问题已经有最佳答案,请猛点这里访问。

这听起来可能是一个简单的问题,但我从未使用||运算符检查具有另一个可能值的NULL。C对以下问题的反应是否存在差异:

1
if (a =="Hello" || a == null)

对比:

1
if (a== null || a =="Hello")


这会有所不同。

布尔运算符短路。如果布尔表达式的第一部分可以确定整个表达式的结果,那么它将在那里停止。对于问题中的精确样本来说,这并不重要,但是假设您有:

1
if (a.property =="hello" || a == null)

如果anull的话,就会抛出异常。这不会:

1
if (a == null || a.property =="hello")

还可以使用空条件和空合并运算符:

1
if (a ??"hello" =="hello")

1
if (a?.property ??"hello" =="hello")

Is there a difference in how C# responds to ?

C#的反应没有区别,所以命令很重要。

在这种情况下,表达式从左到右进行计算。所以第二个是正确的,在这个条件下,语义上最安全的选择。

1
if (a== null || a =="Hello") //check for null first