有没有人知道C#编译器使用以下代码做什么?
dict = new Dictionary<int, string>()
{
{ 1, "value1" },
{ 2, "value2" }
}
目前尚不清楚它是否创建KeyValuePair实例并调用Add方法,还是做了更优化的事情。你们中有谁都知道吗?
答案 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
方法负责其余部分。