2

下面的代码在我写的时候看起来不错,但是当我再次回到它时,很难理解发生了什么。曾经有括号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;
}
4

3 回答 3

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,而不是每次都检查

于 2010-07-26T23:26:16.833 回答
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;
于 2010-07-26T23:22:10.080 回答
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());

我知道这确实是一个很小的风格改变,但我总是发现当我必须传递很多参数或有一些非常长的语句时,当我继续换行时,我应该在;.

它可以防止Debug.Assert()看起来像 3 行。

至于value==,我同意之前的海报。你应该做一个bool isDatabaseandisFile来防止ConfigType在你的第一个参数中调用一个字段两次。

于 2010-07-27T00:19:22.120 回答