繁体   English   中英

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

[英]C# AND operator with null checking

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

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

MSDN

操作

x && y

对应于操作

x&y

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

是的,这绝对是安全的。

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

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

这种评估称为懒惰评估

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

7.11条件逻辑运算符 - C#参考MSDN

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM