0Pricing
C# Academy · 课时

展开元素

使用展开运算符组合集合。

展开元素 是 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 集合表达式语法
  2. 展开元素
  3. 集合的目标类型推断
  4. 集合构建器
← 返回 C# Academy