3

我承认我对 c# 的经验还很远,所以这可能很明显,但我不得不问——这两个代码示例之间有什么区别吗?如果不明显,第一条语句在 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 代码,您会发现两个构造函数调用之间没有区别:

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 回答