第一章:C# 13集合表达式概述
C# 13 引入了集合表达式(Collection Expressions),这是一种全新的语法特性,旨在简化集合的创建与操作。开发者现在可以使用统一的语法来初始化数组、列表以及其他可变集合类型,而无需关心具体的目标类型。这种“目标类型化”的集合构造方式提升了代码的可读性与灵活性。
集合表达式的语法结构
集合表达式使用方括号包含元素,类似于数组初始化,但支持隐式转换为多种集合接口。例如,以下代码展示了如何使用集合表达式创建不同类型的集合:
// 创建一个整型数组
int[] numbers = [1, 2, 3, 4, 5];
// 初始化一个 List<int>
List<int> list = [1, 2, 3];
// 赋值给 IEnumerable<string>
IEnumerable<string> names = ["Alice", "Bob"];
上述代码中,编译器会根据左侧变量的类型自动推断并生成合适的集合实例,无需显式调用构造函数或使用 LINQ 方法。
支持的集合类型
集合表达式不仅限于数组,还可用于任何实现特定模式的类型。以下是常见支持类型:
- 数组(T[])
- List<T> 和其他 IList<T> 实现
- ImmutableArray<T>(来自 System.Collections.Immutable)
- 自定义类型,只要提供合适的构造或工厂方法
嵌套与展开操作
集合表达式支持嵌套和展开(spread)操作符
..,允许将现有集合的内容插入到新集合中:
int[] a = [1, 2];
int[] b = [..a, 3, 4]; // 结果为 [1, 2, 3, 4]
此功能在组合多个数据源时尤为实用,减少了手动循环或调用 Concat 的需要。
| 特性 | 说明 |
|---|
| 目标类型化 | 根据接收变量类型决定集合实现 |
| 统一语法 | 适用于多种集合类型 |
| 展开操作符 | 使用 .. 插入现有集合元素 |
第二章:集合表达式的核心语法与语义解析
2.1 集合表达式的基本结构与初始化模式
集合表达式是现代编程语言中用于构建和操作集合数据的核心语法结构,广泛应用于列表、集合、字典等容器类型的初始化与变换。
基本结构
集合表达式通常由输出表达式、输入变量和可选的过滤条件组成。其通用形式可表示为:
{ output | input, condition },在不同语言中语义略有差异。
初始化模式示例
以 Go 语言切片初始化为例:
numbers := []int{1, 2, 3, 4, 5}
evens := []int{}
for _, n := range numbers {
if n%2 == 0 {
evens = append(evens, n) // 收集偶数
}
}
上述代码通过遍历初始集合并应用条件判断,完成目标集合的构造。`numbers` 为源集合,`range` 提供迭代能力,`if n%2 == 0` 构成过滤逻辑,最终使用 `append` 动态构建结果。
常见初始化方式对比
| 方式 | 语言示例 | 特点 |
|---|
| 字面量 | Python, Go | 简洁直观 |
| 推导式 | Python | 表达力强 |
| 构造函数 | Java | 类型安全 |
2.2 泛型协变与数组转换的底层机制
在类型系统中,泛型协变允许子类型关系在复杂类型构造中保持。例如,若 `String` 是 `Object` 的子类型,则协变使得 `List` 可被视为 `List