想象一下这种情况,我有一个对象,我需要检查一个属性.但是,该对象当前可以具有空值.
如何在单个"if"条件下检查这两个条件?
目前,我必须做这样的事情:
if (myObject != null) { if (myObject.Id != pId) { myObject.Id = pId; myObject.Order = pOrder; } }
我想要这样的东西:
if (myObject != null && myObject.Id != pId)
我想仅在第一个条件成立时评估第二个条件.
也许我错过了什么,这就是为什么我需要你的帮助;-)
if(myObject != null && myObject.Id != pId) { myObject.Id = pId; myObject.Order = pOrder; }
&&
是一个短路逻辑测试 - 如果左侧是真的,它只评估右侧.与"a&b"形成对比,"a&b"总是评估双方(并且按位"和")
应该强调的是,if()中&&的短路评估完全由语言标准(C,C++,Java和C#)保证.自第一版K&R的" C编程语言 " 以来,就一直如此.
这不是你必须担心的"我的编译器是否实现了这个?".如果肯定不会.
if (myObject != null && myObject.Id != pId) { //bla }
这是安全的,因为运算符&&被懒惰地评估,这意味着如果LHS是假的,则从不评估RHS