展开元素
使用展开运算符组合集合。
展开元素 是 CoddyKit 上的免费 C# Academy 课时。 这是第 2 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C# Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C# Academy 课程共包含 4 节课。
展开元素 ..
在集合表达式中,展开元素 .. 会将另一个集合的内容内联到当前表达式中。这是以声明方式组合序列的方法。
using System;
int[] a = [1, 2, 3];
int[] b = [4, 5, 6];
int[] all = [..a, ..b];
Console.WriteLine(string.Join(",", all)); // 1,2,3,4,5,6混合展开元素和单个元素
您可以自由地将展开元素与单个值交错使用,并且顺序会保留。
using System;
int[] middle = [2, 3, 4];
int[] result = [1, ..middle, 5];
Console.WriteLine(string.Join(",", result)); // 1,2,3,4,5前置与追加
展开元素可以轻松实现“添加到开头”或“添加到末尾”,并生成新集合,而不会修改原集合。
using System;
int[] core = [10, 20, 30];
int[] withHead = [0, ..core];
int[] withTail = [..core, 40];
Console.WriteLine(string.Join(",", withHead)); // 0,10,20,30
Console.WriteLine(string.Join(",", withTail)); // 10,20,30,40展开多个源
可以将任意数量的集合展开到一个集合中。这样便能在一个表达式中连接多个列表。
using System;
using System.Collections.Generic;
List<string> x = ["a", "b"];
List<string> y = ["c"];
List<string> z = ["d", "e"];
List<string> merged = [..x, ..y, ..z];
Console.WriteLine(string.Join(",", merged)); // a,b,c,d,e展开不同的集合类型
展开源可以是任何可枚举对象:可以将数组展开到列表中,也可以将列表展开到数组中,依此类推。目标类型决定结果。
using System;
using System.Collections.Generic;
int[] arr = [1, 2];
List<int> list = [3, 4];
int[] combined = [..arr, ..list];
Console.WriteLine(string.Join(",", combined)); // 1,2,3,4展开可枚举序列
即使是 LINQ 生成的延迟序列也可以展开;构建新集合时才会枚举它们。
using System;
using System.Linq;
var evens = Enumerable.Range(1, 6).Where(n => n % 2 == 0);
int[] result = [0, ..evens];
Console.WriteLine(string.Join(",", result)); // 0,2,4,6逐步构建集合
展开元素非常适合在不使用命令式 Add 调用的情况下逐步构建集合。
using System;
int[] baseline = [1, 2, 3];
int[] extra = [4, 5];
int[] full = [..baseline, ..extra, 6];
Console.WriteLine(full.Length); // 6顺序很重要
结果序列遵循元素和展开元素在文本中的顺序,因此交换展开元素会改变输出。
using System;
int[] a = [1, 2];
int[] b = [3, 4];
Console.WriteLine(string.Join(",", [..a, ..b])); // 1,2,3,4
Console.WriteLine(string.Join(",", [..b, ..a])); // 3,4,1,2展开与 Concat
展开通常可以替代 Concat + ToArray。这样可读性更好,并且允许编译器高效地确定结果大小。
using System;
using System.Linq;
int[] a = [1, 2];
int[] b = [3, 4];
// old
int[] oldWay = a.Concat(b).ToArray();
// new
int[] newWay = [..a, ..b];
Console.WriteLine(oldWay.SequenceEqual(newWay)); // True展开到跨度中
由于目标可以是跨度,您可以组合数据,并在对性能敏感的路径中利用栈分配的潜力。
using System;
ReadOnlySpan<int> head = [1, 2];
ReadOnlySpan<int> tail = [3, 4];
int[] joined = [..head, ..tail];
Console.WriteLine(string.Join(",", joined)); // 1,2,3,4实际合并
在这里,我们在一个表达式中将默认设置与覆盖项合并,并让后面的值保留在默认值之后。
using System;
string[] defaults = ["--verbose", "--color"];
string[] userArgs = ["--output=log.txt"];
string[] finalArgs = [..defaults, ..userArgs];
Console.WriteLine(string.Join(" ", finalArgs));快速检查
确认您对展开元素的理解。
回顾
您学习了集合表达式中的展开元素 ..。
[..a, ..b]会连接集合。- 展开元素可以与单个元素混合使用,并且会保留顺序。
- 源可以是数组、列表、跨度或任何
IEnumerable。 - 它是
Concat().ToArray()更清晰的替代方案。
常见问题解答
「展开元素」课时是免费的吗?
是的 — 「展开元素」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C# Academy 课程的其余内容,请升级到 CoddyKit PRO。 C# Academy 课程共包含 4 节课。
「展开元素」这节课中我会学到什么?
使用展开运算符组合集合。 你通过在浏览器中直接运行的动手代码来练习 C# Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 C# Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 C# Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 2 节课,共 4 节。
「展开元素」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 C# Academy 课中编写并运行代码吗?
能。每节 C# Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。