2013-12-19 5 views
27

私は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デバッグを行うことはできません:(

答えて

20

秒が少ない文字が含まれているので、読み、よりコンパクトである必要はありません。もう一度myClass 2を繰り返すと、初期化ロジックは1つのブロックにあります。

実際には生成されたコード内のものを変更しない構文上の砂糖です。 ReSharperの警告

0ここではオブジェクト初期化子を使用することの利点について

長いポスト:

+0

私はその読みやすさについて反対意見を持っているかもしれませんし、不要な構文構成が複雑な解読可能コードにつながりやすいと感じるかもしれませんが(単一のパラームリスト、blechで複雑な初期化子チェーンを再構築した後に)素晴らしい答えです。さらなる読書と完全な質問に感謝します。ありがとうございます。 – kcar

5

初期化子が機能している場合は、ステップバイステップの部分的にデバッグを行うことができますが呼び出されます:

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

この場合、F11はまっすぐにGenerateStringメソッドにつながります。

EDIT:イニシャライザが単純な値の場合、ステップバイステップのデバッグは意味がありません。