下面的代码在我写这篇文章时看起来不错,但当我再次回到它时,很难理解发生的事情。曾经有value == ...
左右的括号,但我必须在StyleCop成为强制性后删除它们(我无法真正控制它)。那么,我该如何改进这部分代码呢?我在想:x = value == y ? true : false;
,但这可能更令人困惑,加上愚蠢,尽管编译器会优化它。
set
{
Debug.Assert(value == ConfigType.DATABASE || value == ConfigType.FILE,
"Configuration type must be either 'File-based' or 'Database-based'; it was: "
+ value.ToString());
// HG TODO: The following is concise but confusing.
this.fileBasedRadioButton.Checked = value == ConfigType.FILE;
this.databaseBasedRadioButton.Checked = value == ConfigType.DATABASE;
}
答案 0 :(得分:3)
bool isFile = value == ConfigType.FILE;
bool isDatabase = value == ConfigType.DATABASE; // or isDatabase = !isFile
Debug.Assert(isFile || isDatabase,
"Configuration type must be either 'File-based' or 'Database-based'; it was: "
+ value.ToString());
this.fileBasedRadioButton.Checked = isFile;
this.databaseBasedRadioButton.Checked = isDatabase;
这使它更具可读性(明确声明bool),你知道它必须是真或假。
这样,如果您需要(可能在将来)使用相同的方法更改基于文件/数据库的设置,您已经拥有bool方便,而不是每次都检查
答案 1 :(得分:1)
如果您不想使用?:
运算符,请使用if..else
。当然它有点冗长,但你不会花费超过几秒的时间来搞清楚它。
几个月后,当您重新访问此代码时,您会很高兴您多花了5行。
使代码易于维护应该是您的首要任务。
if (value == ConfigType.FILE)
this.fileBasedRadioButton.Checked = true;
else
this.fileBasedRadioButton.Checked = false;
if (value == ConfigType.DATABASE)
this.databaseBasedRadioButton.Checked = true;
else
this.databaseBasedRadioButton.Checked = false;
答案 2 :(得分:1)
缩进Debug.Assert()
方法的第二行和第三行。它应该是这样的:
Debug.Assert(value == ConfigType.DATABASE || value == ConfigType.FILE,
"Configuration type must be either 'File-based' or 'Database-based'; it was: "
+ value.ToString());
我知道这实际上是一种轻微的风格改变,但我总是发现当我必须传递很多论点或者有一些很长的陈述时,当我继续使用换行符时我应该在{{1}之前缩进}}
它可以防止;
看起来像3行。
关于Debug.Assert()
,我同意上一张海报。您应该设置value==
bool
和isDatabase
,以防止在第一个arg中从isFile
两次调用字段。