提高短片的可读性,同时保持StyleCop的快乐

时间:2010-07-26 23:12:19

标签: c# readability stylecop

下面的代码在我写这篇文章时看起来不错,但当我再次回到它时,很难理解发生的事情。曾经有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;
}

3 个答案:

答案 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== boolisDatabase,以防止在第一个arg中从isFile两次调用字段。