我一直在处理这类问题,并且想知道你是否有任何光滑优雅的工作:
if(myObject != null && myObject.myProperty != myValue){
//do something
}else{
//do something else
}
如果我运行这个逻辑,当myObject为null时我得到空引用,所以我最终做了:
if(myObject != null){
if(myObject.myProperty != myValue){
//do something
}else{
//do something else
}
}else{
//do something else
}
所以我最终在我的"做其他事情"你们怎么处理这个?
答案 0 :(得分:2)
null
的第一次检查意味着如果不满足第二个条件将不会被评估 - 当使用逻辑AND(&&
)时 - 所以我建议您的空引用异常来自在其他地方,而不是后一种情况。
答案 1 :(得分:2)
没有“优雅”的方式来解决这个问题 - 分享“做别的事情”代码的两种方式实际上是不同程度的非优雅:
if
之前定义一个标志,说明是否需要进行额外处理,并在退出if
声明时对该标志采取行动。第一种解决方案是不言自明的;第二个解决方案看起来像这样:
var processed = false;
if(myObject != null) {
if(myObject.myProperty != myValue){
//do something
processed = true;
}
// do more stuff knowing that myObject is not null
}
if (!processed) {
// do something else
}
答案 2 :(得分:-2)
你的第一句话完全有效。
if(myObject != null && myObject.MyProperty != myValue)
这样做会先评估myObject != null
,因为它右边有一个&&
,如果它是假的,它甚至不需要评估另一个子句。 / p>
如果您只是复制并粘贴您在此处粘贴的代码,我认为您会发现它已成功运行