如何使用C#12集合表达式初始化List<List<int>>?
C# 12 锯齿状集合的集合表达式正确写法
我有一段创建锯齿状集合的代码:
var intListList = new List<List<int>> { new() { 1, 2, 3 } };
想要改用C# 12的集合表达式简化写法,但Resharper(EAP)给出的以下写法无法通过编译:
var intListList = new List<List<int>> { [1, 2, 3] };
正确的可编译写法需要显式声明变量的完整类型,直接使用嵌套的集合表达式即可,不需要new()或外层的集合初始化器语法:
// 可编译! List<List<int>> intListList = [[1, 2, 3]];
之所以原来的写法失败,是因为编译器无法在var配合new List<List<int>> { ... }的上下文里,将内层的[1,2,3]推断为List<int>类型;而显式声明变量类型后,编译器能明确解析嵌套集合表达式对应的类型,从而正常编译。
内容的提问来源于stack exchange,提问作者stuartd
相关产品推荐
相关产品推荐

