链式IF结构

Nel*_*eis 7 c# java

想象一下这种情况,我有一个对象,我需要检查一个属性.但是,该对象当前可以具有空值.

如何在单个"if"条件下检查这两个条件?

目前,我必须做这样的事情:

if (myObject != null)
{
    if (myObject.Id != pId)
    {
        myObject.Id = pId;
        myObject.Order = pOrder;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要这样的东西:

if (myObject != null && myObject.Id != pId)
Run Code Online (Sandbox Code Playgroud)

我想仅在第一个条件成立时评估第二个条件.

也许我错过了什么,这就是为什么我需要你的帮助;-)

Mar*_*ell 43

if(myObject != null && myObject.Id != pId)
{
   myObject.Id = pId;
   myObject.Order = pOrder;
}
Run Code Online (Sandbox Code Playgroud)

&&是一个短路逻辑测试 - 如果左侧是真的,它只评估右侧.与"a&b"形成对比,"a&b"总是评估双方(并且按位"和")


Jam*_*ran 10

应该强调的是,if()中&&的短路评估完全由语言标准(C,C++,Java和C#)保证.自第一版K&R的" C编程语言 " 以来,就一直如此.

这不是你必须担心的"我的编译器是否实现了这个?".如果肯定不会.


spe*_*der 5

if (myObject != null && myObject.Id != pId)
{
//bla
}
Run Code Online (Sandbox Code Playgroud)

这是安全的,因为运算符&&被懒惰地评估,这意味着如果LHS是假的,则从不评估RHS