请解释在 C# 中,利用 SelectMany 方法来实现嵌套集合扁平化操作的具体方式是什么?
考察说明
考查对 LINQ 中 SelectMany 方法作用与用法的理解。
回答思路
- 【回答框架 1】SelectMany 是 LINQ 查询运算符,用于将序列中每个元素投影到多个子元素,并将这些子元素扁平化为单个序列。
- 【回答框架 2】其核心机制是接受一个集合选择器委托,对源集合每个元素调用该委托得到嵌套的 IEnumerable,再串联合并成一个序列。
- 【回答框架 3】常见用法包括二维数组/列表展开、多级导航属性查询,以及将对象集合中的内部集合属性合并输出。
- 【回答框架 4】与 Select 对比,Select 保持嵌套结构,SelectMany 则摊平一层,返回类型是 IEnumerable<TResult>。
- 【回答框架 5】实现时注意延迟执行特性,只有枚举时才真正执行选择与合并过程。
- 【关键点 1】SelectMany 用于扁平化嵌套集合,将多个子序列合并为单一序列。
- 【关键点 2】典型调用:collection.SelectMany(item => item.ChildItems)。
- 【关键点 3】结果类型为 IEnumerable<TResult>,不同于 Select 返回的嵌套结构。
- 【易错点 1】混淆 Select 与 SelectMany 的返回结构,Select 不会扁平化。
- 【易错点 2】忽略延迟执行,可能导致多次枚举时重复执行选择逻辑。