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}
    };

在我使用过的第二次声明()Dictionary<string, object>。两种语法都可以正常工作,但只是渴望了解内部工作。

4

4 回答 4

9

这两种语法是等价的。当初始化表达式中省略构造函数调用时,编译器将尝试绑定到该类型的无参数构造函数。这在 C# 规范的第 7.5.10.1 节中有所介绍

对象创建表达式可以省略构造函数参数列表和括号,前提是它包含对象初始化器或集合初始化器。省略构造函数参数列表并用括号括起来等效于指定一个空的参数列表。

于 2013-07-30T06:40:12.567 回答
5

没什么。使用初始化语法时,您可以省略括号。这相当于调用无参数构造函数。它们在编译时将产生完全相同的字节码。

于 2013-07-30T06:36:18.017 回答
5

这里没有区别,第一个只是第二个的语法糖

于 2013-07-30T06:36:22.093 回答
1

编译器处理后没有区别,输出是相同的代码。

于 2013-07-30T09:13:43.833 回答