关于c#中的集合初始值设定项

时间:2013-03-15 15:59:27

标签: c# collections initializer

我承认我对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" }
};

2 个答案:

答案 0 :(得分:5)

  

那里有没有区别或者()在这种情况下是多余的?

没有区别。使用集合初始值设定项时,添加()是可选的,但生成的已编译IL是相同的。

答案 1 :(得分:2)

不,没有。如果要检查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