实例化 List<T 时的集合表达式是什么>

What is a collection expression when instantiating a List<T>

提问人:pks 提问时间:11/15/2023 最后编辑:Jeanot Zublerpks 更新时间:11/15/2023 访问量:154

问:

我不明白 Intellisense 建议什么来替代我现有的代码(如图所示)enter image description here

如果图像稍后被删除,图中的 Intellisense 建议建议替换

List<int> x = new List<int>();
x.AddRange(Enumerable.Range(0, 300));

List<int> x = [.. Enumerable.Range(0, 300)];

我假设这是 C# 8.0 中引入的范围运算符,但没有围绕此建议用法的文档。..

  • 以这种方式使用范围运算符时,是否存在隐式“新列表”?
  • 我知道左手边的..运算符可以是空白(隐含零),但我不明白如何将可枚举范围用作 ..算子。

如果有人能解释 [x..y] 关于实例化新列表,我将不胜感激。

c# 列表 解构 可枚举 C#-12.0

评论

1赞 Tim Roberts 11/15/2023
由构造暗示。只是说“如果你在列表中有其他元素,就把它们放在这里”。您应该能够删除new[....

答:

1赞 Tim Schmelter 11/15/2023 #1

正如 Jeanot Zubler 所评论的那样:这是 C# 12 的新集合表达式,它昨天与 .NET 8 一起发布。

例如,它允许以下语法:

int[] row0 = [1, 2, 3];
int[] row1 = [4, 5, 6];
int[] row2 = [7, 8, 9];
int[] single = [..row0, ..row1, ..row2];

或者在你的情况下,这是:

List<int> x = [.. Enumerable.Range(0, 300)];

如果我理解正确的话,它是一种“扁平化”运算符(官方:“点差运算符”)。..