如何构造Dictionary<string, List<string>>实例?C#无法使用C++式初始化
解决C#中Dictionary<string, List>的初始化问题
嘿,我完全懂你的困惑——C#的集合初始化语法和C确实有差异,你没法像C那样直接用嵌套花括号来初始化Dictionary里的List{"ab", "abc"}这种元素列表推断成List<string>实例,你得显式创建List对象才行。
正确的初始化写法
这里有两种常用的正确方式:
1. 传统的Dictionary集合初始化语法
显式为每个值创建List<string>实例:
Dictionary<string, List<string>> FirSet = new Dictionary<string, List<string>>() { { "a", new List<string> { "ab", "abc" } }, { "b", new List<string> { "bc", "bcd" } } };
2. C# 6+的索引器简化写法(更清爽)
如果你用的是C# 6及以上版本,可以用索引器语法来初始化;要是版本在C# 9+,还能借助类型推断省略泛型参数,代码会更简洁:
Dictionary<string, List<string>> FirSet = new() { ["a"] = new() { "ab", "abc" }, ["b"] = new() { "bc", "bcd" } };
为什么原来的写法报错?
在C#里,{"ab", "abc"}这种元素列表语法必须配合new关键字,用来初始化新创建的集合实例。而Dictionary初始化时,每个值的位置需要的是一个已经实例化好的集合对象,不是原始的元素列表——编译器没法凭空推断你要的是List还是数组,所以必须显式指定创建List<string>实例。
这样调整后,编译器就能正确识别每个值的类型,顺利完成初始化啦。
内容的提问来源于stack exchange,提问作者Bowen Peng




