写这个的优雅方式是什么?
if (lastSelection != null)
{
lastSelection.changeColor();
}
else
{
MessageBox.Show("No Selection Made");
return;
}
changeColor()
是一个void函数,运行上面代码的函数也是一个void函数。
答案 0 :(得分:14)
您可以通过扭转条件来减少混乱:
if (lastSelection == null)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
答案 1 :(得分:9)
虽然我个人真的不喜欢在函数中使用多个return语句,但根据我见过的防御性编程,你会捕获错误条件并退出,并通过以下任何其他方式:
if(lastSelection == null)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();
如果没有看到它所属的整个功能,很难说我在自己的工作中如何做到这一点。
答案 2 :(得分:2)
我很想确保lastSelection
永远不会为null,并且在当前设计中它将为null的情况下指向一个“空”对象。然后,不需要空检查。从系统中设计出可能的错误总是很好的做法。
IOW,我会问,代码中的不合理是否是你如何进行空检查,或者是否是否需要在所有进行空检查。
答案 3 :(得分:1)
看到其他人都得到了好的答案,不要这样做:
if (lastSelection == null) goto ERR;
lastSelection.changeColor();
//... possibly more stuff...
return;
ERR:
MessageBox.Show("No Selection Made");
答案 4 :(得分:1)
这是实现此目的的另一种方式。
Action _action = (lastSelection != null
?
new Action(lastSelection.changeColor)
:
() => Console.WriteLine("No Selection Made"));
_action.Invoke();
也许有点矫枉过正,但你肯定会让人们保持代码的头脑: - )
答案 5 :(得分:0)
我认为你的代码很好:你首先检查了正常情况(lastSelection != null)
然后检查了异常情况。
我可以添加一个修改:
if (lastSelection != null)
{
lastSelection.changeColor();
//your other normal code
}
else
{
MessageBox.Show("No Selection Made");
//return; //no need for this now
}
答案 6 :(得分:0)
快速追赶的做法是首先写下null,如下所示:
if (null == lastSelection)
{
MessageBox.Show("No Selection Made");
return;
}
lastSelection.changeColor();