检查对象是否为空是否安全并且在同一if语句中比较对象的属性值?

时间:2010-08-11 22:48:13

标签: c# .net asp.net

见线程标题。我可以安全地做这样的事情而不用担心NullReferenceException,或者不能保证从左到右评估那些布尔表达式吗?

// can this throw an NRE?
if (obj == null || obj.property == value)
{
   // do something
}

3 个答案:

答案 0 :(得分:21)

他们将从左到右进行评估,保证。是的,它的安全。

  

条件OR运算符(||)   执行其bool的逻辑或   操作数,但只评估它   第二个操作数,如有必要。

http://msdn.microsoft.com/en-us/library/6373h346%28VS.71%29.aspx

答案 1 :(得分:1)

这样做非常安全。如果左边的第一个表达式为true,则不评估其余表达式。

答案 2 :(得分:1)

这确实是安全的。请参阅||&&的C#文档(当然,这是相反的,错误的短路)。

(关于“x || y”)

  

如果x为真,则不评估y   (因为OR的结果   无论如何操作都是如此   y的值可能是)。这被称为   “短路”评估。