有谁知道C#编译器使用以下代码做什么?
dict = new Dictionary<int, string>()
{
{ 1, "value1" },
{ 2, "value2" }
}
Run Code Online (Sandbox Code Playgroud)
它是否创建KeyValuePair实例并调用Add方法或执行更优化的操作尚不清楚.你们中有谁都知道吗?
Meh*_*ari 10
它将Add使用值作为参数调用对象上的方法:
var __temp = new Dictionary<int, string>();
__temp.Add(1, "value1");
__temp.Add(2, "value2");
dict = __temp;
Run Code Online (Sandbox Code Playgroud)
名称Add是硬编码的(在C#规范中指定:7.5.10.3:集合初始值设定项).该方法的参数数量不受限制.它只需匹配方法的参数数量.IEnumerable提供Add方法的任何集合(实现接口)都可以这样使用.
为了进一步澄清,不,编译器并不真正关心该类是Dictionary创建KeyValuePair并传递给它的类Add.它只是生成一个对Add方法的调用序列,在每次调用中传递每个集合项中的所有参数.该Add方法负责其余部分.