这段代码是否有更优雅的解决方案?

问题描述:

var b = someObjectThatWillNotBeNull; 
var a = getA(); 

if(a != null) { 
    if(a.id == b.id) { 
     functionA(); 
    } else { 
     functionB(); 
    } 
} else { 
    functionB(); 
} 

我碰到这个结构很多,总是需要复制functionB所在的代码。它似乎有点马虎。有一个更好的方法吗?这段代码是否有更优雅的解决方案?

+2

这可能更适合[codereview.SE]。 – 2012-04-11 17:37:14

+0

你在用什么语言? – sll 2012-04-11 17:37:16

+0

@sll它的VB .NET 4.0 – hanesjw 2012-04-11 18:08:45

if (a != null && a.id == b.id) { 
    functionA(); 
} else { 
    functionB(); 
} 

你的意思是这样的吗?

+1

这会抛出一个异常,如果一个== null。 a.id不会被实例化。你可以使用try/catch块,然后实例化,但这同样是草率的。 .NET 4.0在if语句中添加了一个新关键字(我认为“也”?),只有在第一次检查成功时才会继续。取决于你使用的语言。 – Corey 2012-04-11 17:40:25

+1

@Corey它不会。如果'a == null',那么'&&'后面的代码将不会被评估。 – trutheality 2012-04-11 17:41:36

+0

@trutheality至少在任何理智的语言:) – jpm 2012-04-11 17:42:00

这是一个有点简单:

if (a == null || a.id != b.id) 
    functionB(); 
else 
    functionA(); 
+0

只是我的回答。个人品味,至于哪个更清楚。 +1都一样。 – jpm 2012-04-11 17:43:11

这里,我们正在采取& &运营商为第exp的优势将作为真正的评价则只剩下一EXP将if()语句

评估中
 if(a != null && a.id==b.id) { 
     functionA(); 
     } 
     else { 
     functionB(); 
     }