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

标签 c# dictionary

有谁知道 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/

相关文章:

python - Pandas :根据条件将新列映射到现有列

c# - 与 Properties.Resources.image 的图像比较

c# - 同时选中DataGridView中的所有复选框

c# - 在 Visual C# 中循环单选按钮检查

ios - 为什么 swift 这里使用结构体而不是字符串作为字典键?

vba - 在 VBA 宏中使用字典的简单 VLOOKUP

ios - 从 Plist 中检索颜色。 iOS

Python字典转换为小写?

c# - 源生成: How to get involved types from InvocationExpressionSyntax

c# - 适合 .Net 开发人员的 Grails/Roo