0

我一直在处理这类问题,想知道您是否有任何巧妙优雅的解决方法:

if(myObject != null && myObject.myProperty != myValue){
//do something
}else{
//do something else
}

如果我运行这个逻辑,我会在 myObject 为空时得到空引用,所以我最终会这样做:

if(myObject != null){
    if(myObject.myProperty != myValue){
        //do something
    }else{
        //do something else
    }
}else{
    //do something else
}

所以我最终在我的“做别的事情”上有多余的代码你们如何处理这个?

4

3 回答 3

2

第一次检查null意味着如果不满足第二个条件,则不会评估第二个条件 - 使用逻辑 AND ( &&) 时 - 所以我建议您的空引用异常来自其他地方,而不是后一个条件。

于 2012-11-21T17:30:58.587 回答
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
}
于 2012-11-21T17:31:27.463 回答
-2

你的第一个陈述是完全有效的。

if(myObject != null && myObject.MyProperty != myValue)

这会做的是它会myObject != null首先评估,因为它&&的右边有一个,如果它是假的,它甚至不需要评估另一个子句。

如果只是复制粘贴这里粘贴的代码,我想你会发现它运行成功了

于 2012-11-21T17:29:14.850 回答