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

时间:2010-05-25 21:52:33

标签: c# dictionary

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

dict = new Dictionary<int, string>()
{
    { 1, "value1" },
    { 2, "value2" }
}

目前尚不清楚它是否创建KeyValuePair实例并调用Add方法,还是做了更优化的事情。你们中有谁都知道吗?

1 个答案:

答案 0 :(得分:10)

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

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

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

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