c#中的两个if语句有区别吗?

Sam*_*Sam 2 c# if-statement

有什么区别:

 if (myObject != null && myObject.someint == 0)
 {
      // do something
 }
Run Code Online (Sandbox Code Playgroud)

if (myObject != null)
{
    if (myObject.someint == 0)
    {
        // do something
    }
}
Run Code Online (Sandbox Code Playgroud)

我一直认为它会评估第一个条件,如果为false,它会跳过第二个条件的评估.但是我在null-reference的运行时遇到错误.myObject是空的,它试图检查myObject.someint

该对象可以在外部进行修改,是否检查了对象存在的第一个条件,但是当它进入下一个条件时,有什么东西杀死了myObject中的引用?

如果是后者,任何避免的方法(在我看来,上述两种方式都做了if检查都是一样的).只有我可以想象的是try/catch

Yur*_*ich 6

它必须是自&&短路以来的后期条件false.使用

lock(myObject)
Run Code Online (Sandbox Code Playgroud)