web-dev-qa-db-ja.com

オブジェクト初期化子を使用-Resharperの提案

私は毎日ReSharperを使用していますが、今日私は、ReSharperが「オブジェクト初期化子を使用する」ことを提案する理由を自問しました。

MyClass myClass = new MyClass();
myClass.MyInt = 0;
myClass.MyString = string.Empty;

次のように置き換えられます:

MyClass myClass = new MyClass
{
    MyInt = 0, 
    MyString = string.Empty
};

これは私のコードの実行を最適化しますか、それとも単なる再フォーマットの問題ですか?

個人的には好きです。しかし、時々私はそれが嫌いです、これのために:

Resharper

できませんstep-by-stepデバッグ:(

32
Wassim AZIRAR

2番目の文字は含まれる文字数が少ないため、読みやすくなっています。 myClassをさらに2回繰り返す必要はなく、初期化ロジックは1つのブロックにあります。

これは実際には、生成されたコードの内容を変更しない構文糖衣です。気に入らない場合は、ReSharperの警告をいつでも無効にできます。

ここにオブジェクト初期化子を使用する利点に関するより長い投稿:

27
Cyril Gandon

イニシャライザが関数呼び出しである場合、段階的にデバッグを部分的に行うことができます。

MyClass c = new MyClass() 
{
    MyInt = 3,
    MyString = GenerateString(9)
};

この場合、F11を押すと、GenerateStringメソッドに直接進みます。

編集:初期化子が単純な値である場合、段階的なデバッグはとにかく意味がありません。

6
Zoran Horvat