有谁知道 C# 编译器在后台使用以下代码做了什么?
dict = new Dictionary<int, string>()
{
{ 1, "value1" },
{ 2, "value2" }
}
不清楚它是创建 KeyValuePair 实例并调用 Add 方法,还是做一些更优化的事情。你们有人知道吗?
最佳答案
它将以值作为参数调用对象的 Add
方法:
var __temp = new Dictionary<int, string>();
__temp.Add(1, "value1");
__temp.Add(2, "value2");
dict = __temp;
名称 Add
是硬编码的(在 C# 规范中指定:7.5.10.3:集合初始值设定项) .该方法的参数数量没有限制。它只需要匹配方法的参数数量。任何提供 Add
方法的集合(实现 IEnumerable
接口(interface))都可以这样使用。
为了进一步澄清,不,编译器并不真正关心该类是 Dictionary
来创建 KeyValuePair
并将其传递给 Add
。它只是生成对 Add
方法的一系列调用,在每次调用中传递每个集合项中的所有参数。 Add
方法负责其余的工作。
关于c# - 在 C# 上使用数组初始化语法初始化 Dictionary 实例时,幕后会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2908804/