具有空检查的C#AND运算符

时间:2012-10-12 09:26:28

标签: c# operators

我读到.NET中的AND运算符&&有条件地计算它的第二个参数。

检查null是否安全,然后检查单个语句中的某些字段?

例如,假设我们有一个SomeClass类,它有一个整数字段Id:

class SomeClass
{
   public Int32 Id { get; set; }
}

然后,我们在某处收到此类型的对象并尝试对其执行某些操作:

public void SomeMethod(SomeClass obj)
{
   if (obj != null)
      if (obj.Id == 1)
      {
         // do some actions
      }
}

我们可以按如下方式重写,以减少代码量吗?无效检查是否安全?

public void SomeMethod(SomeClass obj)
{
   if (obj != null && obj.Id == 1)
      // do some actions
}

5 个答案:

答案 0 :(得分:7)

是的,它是安全的,&&条件从“从左到右”处理,如果第一个在您的情况下不匹配,则第二个不会被评估

msdn

  

操作

     

x&& ÿ

     

对应于操作

     

x& ÿ

     

除了如果x为假,则不评估y,因为结果为   无论y的值是什么,AND操作都是假的。这是   被称为“短路”评估。

答案 1 :(得分:3)

是的,这绝对是安全的。

正如您在问题中所述,如果对象为null,则仅计算第一个条件,因此永远不会执行第二个条件(会引发NullReferenceException)。这也被称为“短路”逃避。

答案 2 :(得分:1)

是的......这在C#和许多其他语言中是安全的。如果程序知道以下检查不能使整个if语句变为真,则甚至不需要查看它们。

此类评估称为Lazy Evaluation

答案 3 :(得分:1)

这里的术语是"short-circuit"。使用和(&&)运算符,如果第一个条件失败,它将不会继续下一个条件。他们这样做的方式不仅仅是保存它是正确的方法。

7.11 Conditional logical operators - C# Reference MSDN

  

&&和||运算符称为条件逻辑运算符。   它们也被称为“短路”逻辑运算符。

答案 4 :(得分:1)

是的,这就是简单的逻辑,如果在几个AND语句中,一个是假的,则不需要继续评估它们,因为结果将为FALSE,因此编译器在找到第一个FALSE时停止评估