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 を明示的に宣言します)。true または false でなければならないことがわかります。

そして、このようにして、(おそらく将来) 同じ方法でファイル/データベースに基づいて設定を変更する必要がある場合、毎回チェックするのではなく、すでに bool が便利です

于 2010-07-26T23:26:16.833 に答える
1

メソッドの2行目と3行目をインデントし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==、前のポスターに同意します。最初の引数でフィールドが2回呼び出されないように、bool isDatabaseとを作成する必要があります。isFileConfigType

于 2010-07-27T00:19:22.120 に答える
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 に答える