3

私はc#の経験があまりないことを認めているので、これは明らかかもしれませんが、質問する必要があります-2つのコードサンプルの間に違いはありますか?はっきりしない場合は、最初のステートメントでnew演算子の最後の()を省略します。そこに何か違いはありますか、それとも()はこの文脈では単に冗長ですか?

private static Dictionary<string, string> dict1 = new Dictionary<string, string>
{
    { "a", "A" },
    { "b", "B" }
};

private static Dictionary<string, string> dict2 = new Dictionary<string, string>()
{
    { "a", "A" },
    { "b", "B" }
};
4

2 に答える 2

6

そこに何か違いはありますか、それとも()はこの文脈では単に冗長ですか?

違いはありません。コレクション初期化子を使用する場合、の追加()はオプションですが、結果としてコンパイルされるILは同じです。

于 2013-03-15T16:00:40.147 に答える
3

いいえ、ありません。ILコードを検査する場合、2つのコンストラクター呼び出しに違いはありません。

IL_0028:  newobj      System.Collections.Generic.Dictionary<System.String,System.String>..ctor
IL_002D:  stloc.1     // <>g__initLocal1
IL_002E:  ldloc.1     // <>g__initLocal1
IL_002F:  ldstr       "a"
IL_0034:  ldstr       "A"
IL_0039:  callvirt    System.Collections.Generic.Dictionary<System.String,System.String>.Add
IL_003E:  ldloc.1     // <>g__initLocal1
IL_003F:  ldstr       "b"
IL_0044:  ldstr       "B"
IL_0049:  callvirt    System.Collections.Generic.Dictionary<System.String,System.String>.Add
IL_004E:  ldloc.1     // <>g__initLocal1
于 2013-03-15T16:01:29.310 に答える