5

C#(5.0).Net(4.5)を使用してアプリケーションを開発しています。以下の辞書変数の宣言との違いを知りたいです。1.

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

そして2。

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

2 番目の宣言では()、 afterを使用しましたDictionary<string, object>。どちらの構文も正常に機能しますが、内部作業について知りたいだけです。

4

4 に答える 4

9

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

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

于 2013-07-30T06:40:12.567 に答える
5

何もありません。初期化構文を使用する場合、括弧を省略できます。これは、パラメーターなしのコンストラクターを呼び出すことと同じです。コンパイルすると、まったく同じバイトコードが生成されます。

于 2013-07-30T06:36:18.017 に答える
5

ここに違いはありません。最初のものは 2 番目のものの単なる構文糖衣です。

于 2013-07-30T06:36:22.093 に答える
1

コンパイラによって処理された後、出力は同じコードです。

于 2013-07-30T09:13:43.833 に答える