编程逻辑IF然后

时间:2012-11-21 17:27:08

标签: c# if-statement logic

我一直在处理这类问题,并且想知道你是否有任何光滑优雅的工作:

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
}

所以我最终在我的"做其他事情"你们怎么处理这个?

3 个答案:

答案 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>

如果您只是复制并粘贴您在此处粘贴的代码,我认为您会发现它已成功运行