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

在 C# 中,若要对集合执行批量添加或批量删除,有哪些常用实现方式?请说明各自的使用场景与注意事项。

考察说明

考查候选人对 C# 集合批量操作 API 的掌握程度及性能与安全考量。

回答思路

  1. 【回答框架 1】批量添加可使用 List<T>.AddRange 或 HashSet<T>.UnionWith,它们一次性加入多个元素,减少多次 Add 的调用开销;AddRange 要求目标为 List<T>,UnionWith 适用于 HashSet<T> 并自动去重。
  2. 【回答框架 2】批量删除可使用 List<T>.RemoveAll(Predicate<T>) 按条件移除,或 RemoveRange 按索引范围删除;对于 HashSet<T> 可用 ExceptWith 传入集合批量移除。
  3. 【回答框架 3】若需在循环中频繁增删,应避免逐个操作,改用批量方法以降低时间复杂度;同时注意修改集合时若涉及迭代,需先收集待处理项再批量操作,防止 InvalidOperationException。
  4. 【回答框架 4】对于并发场景,批量操作需考虑线程安全,可使用 ConcurrentBag 或加锁;批量添加大量数据时,可预估容量(如 List 的 Capacity)以减少扩容次数。
  5. 【回答框架 5】选择方法时需明确集合类型与需求:有序且允许重复用 List,唯一性用 HashSet,需要键值对用 Dictionary 的批量操作(如 Add 多个键值对需循环或使用 ToDictionary)。
  6. 【关键点 1】List<T>.AddRange 和 HashSet<T>.UnionWith 是批量添加的常用方法。
  7. 【关键点 2】List<T>.RemoveAll 和 RemoveRange 分别支持条件删除和范围删除。
  8. 【关键点 3】批量操作能减少调用开销,但需注意集合类型匹配和迭代修改异常。
  9. 【关键点 4】并发环境下批量操作需额外同步或使用线程安全集合。
  10. 【关键点 5】预估容量可优化大批量添加的性能。
  11. 【易错点 1】RemoveRange 要求索引有效,否则抛出 ArgumentException。
  12. 【易错点 2】在迭代集合时直接批量修改会引发 InvalidOperationException,需先复制或收集。
  13. 【易错点 3】HashSet 的 ExceptWith 会修改原集合,若需保留原集合应先复制。