You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何构造Dictionary<string, List<string>>实例?C#无法使用C++式初始化

解决C#中Dictionary<string, List>的初始化问题

嘿,我完全懂你的困惑——C#的集合初始化语法和C确实有差异,你没法像C那样直接用嵌套花括号来初始化Dictionary里的List值。问题出在:C#编译器没法自动把{"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

火山引擎 最新活动