【问题标题】:OR Comparison order in if statement [duplicate]或 if 语句中的比较顺序 [重复]
【发布时间】:2018-08-13 11:31:19
【问题描述】:

这听起来像是一个简单的问题,但我从未使用|| 运算符来检查NULL 是否具有另一个可能的值。 C# 的响应方式是否有区别:

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

对比:

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

【问题讨论】:

  • 在这个简单的例子中,不,但是当您开始检查对象的null 属性时,顺序很重要。如果您的对象本身为空,并且您在访问其属性之一之前没有检查它,那么您将获得NullReferenceException

标签: c#


【解决方案1】:

C# 的响应方式有区别吗?

C# 的响应方式没有区别,因此顺序很重要。

在这种情况下,表达式是从左到右计算的。 因此,在这种情况下,第二个是正确的语义和最安全的选择。

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

【讨论】:

  • 在这个简单的情况下,结果没有区别。
  • 在他的情况下,第一个也可以......
  • @KennethK.:正如我所言,这不仅仅是关于 this 的情况,而是一般情况下。首先检查null
【解决方案2】:

它可以有所作为。

布尔运算符短路。如果布尔表达式的第一部分可以确定整个表达式的结果,它将停在那里。这对于问题中的确切样本并不重要,但想象一下你有这个:

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

如果anull,则会抛出异常。这不会:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 2012-12-23
    • 2019-02-06
    • 2012-12-06
    • 1970-01-01
    • 2013-07-19
    • 1970-01-01
    相关资源
    最近更新 更多