gpt4 book ai didi

c# - Dictionary 初始化中出现 KeyNotFoundException 的原因

转载 作者:太空狗 更新时间:2023-10-29 21:08:07 24 4
gpt4 key购买 nike

下面的代码

new Dictionary<string, List<int>> {
["a"] = {1},
};

抛出运行时 KeyNotFoundException ,尽管 {1} 是一个格式正确的数组(即 int[] a = {1,2,3,4} 是有效代码)。更改 TValueDictionaryint[] , 抛出编译时 CS1061 ,但这不是(注意添加的 new[] 数组分配):

new Dictionary<string, IEnumerable<int>> {
["a"] = new[]{1},
};

为什么会这样?

最佳答案

您的第一段代码使用了集合初始值设定项,它不使用逻辑赋值,而是旨在对现有 集合调用Add。换句话说,这:

var x = new Dictionary<string, List<int>> {
["a"] = {1},
};

相当于:

var tmp = new Dictionary<string, List<int>>();
var list = tmp["a"];
list.Add(1);
var x = tmp;

希望扩展的第二行会抛出异常的原因显而易见。

你的部分推理错误是:

albeit that {1} is a perfectly well-formed array

不,不是。语法 {1} 在不同的上下文中有不同的含义。在本例中,它是一个集合初始化器。在声明中:

int[] a = { 1, 2, 3, 4 };

它是一个数组初始化器。该语法 在数组声明中创建一个新数组,或作为数组创建表达式的一部分,例如new[] { 1, 2, 3, 4 }.

关于c# - Dictionary 初始化中出现 KeyNotFoundException 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397939/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com