带空检查的C#与运算符

带空检查的C#与运算符,c#,operators,C#,Operators,我了解到.NET中的AND运算符&&有条件地计算其第二个参数 检查null然后检查单个语句中的某些字段是否安全 例如,假设我们有一个类SomeClass,它有一个整型字段Id: class SomeClass { public Int32 Id { get; set; } } 然后,我们在某处接收到这种类型的对象,并尝试对其执行一些操作: public void SomeMethod(SomeClass obj) { if (obj != null) if (obj.I

我了解到.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
}

是的,这样做绝对安全


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

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

手术

x&y

对应于操作

x&y

但如果x为false,则不计算y,因为 无论y的值是多少,AND运算都是false。这是 被称为“短路”评估。

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

这种类型的评估称为。

这里的术语是。使用and
(&&)
运算符,如果第一个条件失败,它将不会继续执行下一个条件。他们认为你所做的不仅是保存,而且是正确的做法

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


是的,这是一个简单的逻辑,如果在多个AND语句中,有一个是false,则不需要继续计算它们,因为结果将是false,因此编译器在发现第一个false时停止计算