使用数组初始化语法在C#上初始化Dictionary实例时会发生什么?

有没有人知道C#编译器使用以下代码做什么?

dict = new Dictionary() { { 1, "value1" }, { 2, "value2" } } 

它是否创建KeyValuePair实例并调用Add方法或执行更优化的操作尚不清楚。 你们有谁都知道吗?

它将使用值作为参数调用对象上的Add方法:

 var __temp = new Dictionary(); __temp.Add(1, "value1"); __temp.Add(2, "value2"); dict = __temp; 

名称Add是硬编码的(在C#规范中指定: 7.5.10.3 :Collection初始化程序)。 该方法的参数数量不受限制。 它只需匹配方法的参数数量。 任何提供Add方法的集合(实现IEnumerable接口)都可以这样使用。

为了进一步澄清,不,编译器并不真正关心该类是用于创建KeyValuePairDictionary ,并将其传递给Add 。 它只是生成一个对Add方法的调用序列,传递每个调用中每个集合项中的所有参数。 Add方法负责其余部分。