2013-07-30 51 views
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>后使用()。 两种语法都可以正常工作,但只是渴望了解内部工作。

回答

9

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

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

+0

上述两种语法之间是否存在性能差异? –

+0

应该没有任何区别。即便如此,它应该可以忽略不计。而且由于应用程序的框架和设计,应用程序性能也会更好,如果需要,这些东西可以忽略。 – Sandy

+0

我很感谢你的解释,但什么是微不足道的表现。毕竟性能微不足道的组合在开发上会造成很大的降级。 –

5

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

5

这里没什么区别,第一个就是第二个简单的syntactic sugar

1

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