2013-07-30 2 views
5

私はC#(5.0).Net(4.5)を使ってアプリケーションを開発しています。 辞書変数の宣言には以下の違いがあります。 1.定義辞書の相違点

var emailtemplateValues = new Dictionary<string, object> 
    { 
     {"CreatorName", creatorUserInfo.UserName}, 
     {"ProjectName", masterProjectInfo.Title}, 
     {"Reason", reason} 
    }; 

と私はDictionary<string, object>()を使用していた第二の宣言に 2.

var emailtemplateValues = new Dictionary<string, object>() 
    { 
     {"CreatorName", creatorUserInfo.UserName}, 
     {"ProjectName", masterProjectInfo.Title}, 
     {"Reason", reason} 
    }; 

。 両方の構文はうまく動作しますが、内部作業について知りたいだけです。

答えて

9

これらの2つの構文は同等です。初期化子式からコンストラクタ呼び出しを省略すると、コンパイラはパラメータのないコンストラクタにその型をバインドしようとします。これはC#仕様のセクション7.5.10.1でカバーされています

オブジェクト作成式では、オブジェクト初期化子またはコレクション初期化子が含まれていれば、コンストラクタ引数リストを省略してかっこを囲むことができます。コンストラクタの引数リストを省略してかっこを囲むことは、空の引数リストを指定することと同じです。

+0

上記の2つの構文の間にパフォーマンスの違いはありますか? –

+0

違いはありません。たとえそうであっても、それはごくわずかです。また、アプリケーションのフレームワークや設計のためにアプリケーションのパフォーマンスが向上し、必要な場合は無視できます。 – Sandy

+0

私はあなたの説明を感謝しますが、無視できるパフォーマンスは何ですか。無視できる性能のすべての組み合わせが開発の大きな低下を引き起こした後。 –

5

なし。イニシャライザ構文を使用するときは、括弧を省略することができます。これは、パラメータのないコンストラクタを呼び出すのと同じです。コンパイル時に同じバイトコードを生成します。

5

ここでの違いはありません。第1のものは、第2のものの単純にsyntactic sugarです。

1

処理されたコンパイラの後に出力が同じコードであることに違いはありません。