关于c#中的集合初始化式
本文关键字:初始化 集合 关于 | 更新日期: 2023-09-27 18:04:10
我承认我对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" }
};
在这个上下文中()有什么区别吗?还是()只是多余的?
无差异。当使用集合初始化器时,添加()
是可选的,但是生成的编译IL是相同的。
没有。如果您检查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