首页 > 解决方案 > C# - 使用列表初始化字典时出现 KeyNotFoundException价值观

问题描述

初始化静态字典时抛出 KeyNotFoundException(“字典中不存在给定的键”)。代码如下:

public class Test {

    static public Dictionary<string,List<string>> dictionary = new Dictionary<string,List<string>>() {

        ["key1"] = {"testing","testingagain"},
        ["key2"] = {"testing","testingagain"}
    };
}

但是,如果使用 List 构造函数显式初始化字典,则它是成功的:

public class Test {

    static public Dictionary<string,List<string>> works = new Dictionary<string,List<string>>() {

        ["key1"] = new List<string>() {"testing","testingagain"},
        ["key2"] = new List<string>() {"testing","testingagain"}
    };
}

我认为,由于第一个编译得很好,编译器会知道它们是List<string>对象,并且示例会给出相同的结果。他们为什么不呢?

标签: c#

解决方案


因为List<T>实现IEnumerable并包含 的定义Add,以及集合初始化器在 C# 中的工作方式,所以该声明在编译时有效,但同样由于您尚未实际初始化,List<string>它在运行时由于内存分配而变得无效。


推荐阅读