C#面试题更新 2026-08-03

在 C# 的 LINQ 中,GroupBy 方法的分组功能是如何实现的?请说明其基本用法及常见应用场景。

考察说明

考查对 LINQ 中 GroupBy 分组操作的理解和应用能力

回答思路

  1. 【回答框架 1】GroupBy 是 LINQ 中的标准查询操作符,用于将序列中的元素按照指定的键选择器进行分组,返回 IGrouping<TKey, TElement> 类型的序列,每个分组包含一个键和该键对应的元素集合。
  2. 【回答框架 2】基本用法是通过 lambda 表达式指定分组键,例如 collection.GroupBy(x => x.Category),结果可直接遍历获取每个分组的 Key 和元素列表,也可配合 Select 投影为匿名类型或自定义类型。
  3. 【回答框架 3】GroupBy 的常见应用场景包括统计汇总,如按类别计数、求和或平均值;数据整理,如将平面列表转换为层级结构;以及去重,通过分组后取每组第一个元素实现。
  4. 【回答框架 4】在实际使用中,需注意分组键的比较默认使用默认相等比较器,可通过自定义 IEqualityComparer 来改变分组规则;延迟执行特性意味着分组结果在遍历时才计算。
  5. 【回答框架 5】若需要按键排序,可在分组后使用 OrderBy 对分组结果排序,或结合 ToDictionary 快速按键检索分组,但对大型集合要注意内存占用。
  6. 【关键点 1】GroupBy 返回 IGrouping<TKey,TElement> 序列,每个分组包含 Key 和元素集合
  7. 【关键点 2】分组键由键选择器决定,默认使用默认相等比较器进行键比较,可传入自定义比较器
  8. 【关键点 3】GroupBy 延迟执行,遍历时计算;常与聚合函数如 Count、Sum、Average 配合使用
  9. 【关键点 4】可用于去重、数据分层和统计汇总,但需注意内存和性能
  10. 【关键点 5】分组结果可用 ToDictionary 转为字典以便快速访问,但要确保键唯一
  11. 【易错点 1】不能假设分组结果有序,分组顺序是按键的第一次出现顺序,若需排序需显式使用 OrderBy
  12. 【易错点 2】使用 ToDictionary 时,若分组键可能重复会抛异常,应先用 Distinct 或检查键
  13. 【易错点 3】延迟执行可能导致多次枚举,若集合被修改可能产生不一致结果,应谨慎