3

有时在安全和害怕之间只有一线之隔。

这段代码是否越界进入了吓人的区域?

DuckbillPlatypusForm dbpf = null;
if (radioButtonUseExistingPlatypus.Checked) {
    dbpf = new DuckbillPlatypusForm(DuckbillSetupUtils.DuckbillPlatypusState.Readonly, funnyMammalIDs);
} else if (radioButtonCreateNewFromExistingPlatypus.Checked) {
    dbpf = new DuckbillPlatypusForm(DuckbillSetupUtils.DuckbillPlatypusState.Template, funnyMammalIDs);
} else if (radioButtonCreateNewPlatypus.Checked) {
    dbpf = new DuckbillPlatypusForm(DuckbillSetupUtils.DuckbillPlatypusState.StartNew, funnyMammalIDs);
}
if (null != dbpf)
{
    dbpf.Show();
}

毕竟单选按钮只有三个,并且在设计时检查了一个,所以 dbpf 永远不能为空,对吧?除非以某种方式在设计时所有单选按钮都未选中,或者我添加了另一个单选按钮而不更新此代码,并且该单选按钮被选中,但是在什么时候我只是“咬紧牙关”并接受类似的风险?

4

1 回答 1

4

在我看来,检查 null 是件好事,因为将来可能会添加另一个单选按钮。也许来自您团队的另一位开发人员(不是您自己),也许在未来相当长的一段时间内。

如果变量为空,则将其作为异常处理可能会更好,因为这肯定是代码中的错误,应该修复。

编辑:

如果你稍微重新排列你的代码,异常的事情就会变得很自然。只需将读数与 GUI 分开即可。

function DuckbillSetupUtils.DuckbillPlatypusState StateFromGui()
{
  if (radioButtonUseExistingPlatypus.Checked)
    return DuckbillSetupUtils.DuckbillPlatypusState.Readonly;
  if (radioButtonCreateNewFromExistingPlatypus.Checked)
    return DuckbillSetupUtils.DuckbillPlatypusState.Template;
  if (radioButtonCreateNewPlatypus.Checked)
    return DuckbillSetupUtils.DuckbillPlatypusState.StartNew;
  else
    return DuckbillSetupUtils.DuckbillPlatypusState.Undefined;
}

new DuckbillPlatypusForm(StateFromGui(), funnyMammalIDs);

现在,如果使用 State 调用构造函数Undefined,则可以抛出异常。这样,如果您添加另一个单选按钮,您只需更新此StateFromGui功能,并且您有一个单点来测试状态。

于 2012-07-12T22:25:00.347 回答