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

nw.*_*nw. 12 .net c# asp.net

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

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

hei*_*erg 22

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

条件OR运算符(||)执行其bool操作数的逻辑或,但仅在必要时才计算其第二个操作数.

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

  • 唯一需要注意的是,如果有一个线程可能会在执行左右评估之间将对象的值从非null更改为null.这将是一个罕见但可能的问题. (7认同)