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

C# 编程里,使用什么方法能够一次性清空一个 List 中的全部项目?

技术原理C#

考察说明

考查对 C# 中 List<T> 集合清空操作方法的掌握程度。

回答思路

  1. 【回答框架 1】C# 中 List<T> 提供了一个 Clear() 方法,调用后会将集合中的所有元素移除,并且集合的 Count 属性变为 0,但 Capacity 属性保持不变,即不会自动释放内部数组占用的内存。
  2. 【回答框架 2】Clear() 方法的时间复杂度为 O(n),因为需要将每个元素设置为默认值以便垃圾回收器回收引用类型对象;对于值类型元素,其开销相对较小。
  3. 【回答框架 3】使用 Clear() 后,List 对象本身仍然可用,可以继续添加新元素,这与重新 new 一个新的 List 不同,后者会额外分配新数组,而 Clear() 则复用原数组。
  4. 【回答框架 4】如果需求是仅移除满足特定条件的元素,则应使用 RemoveAll(Predicate<T>) 方法,而不是 Clear();Clear() 会无条件移除所有元素。
  5. 【回答框架 5】对于大量元素的 List,Clear() 后若需要释放内存,可考虑调用 TrimExcess() 来减少容量,但这并非必须操作,需根据实际场景权衡性能。
  6. 【关键点 1】List<T>.Clear() 移除全部元素且 Count 变为 0。
  7. 【关键点 2】Clear() 不改变 Capacity,内部数组内存不立即释放。
  8. 【关键点 3】Clear() 时间复杂度为 O(n)。
  9. 【关键点 4】Clear() 后 List 仍可复用,无需重新创建。
  10. 【关键点 5】条件删除应使用 RemoveAll() 而非 Clear()。
  11. 【易错点 1】误以为 Clear() 后 Capacity 也会变为 0,实际容量不变,如需释放内存应手动调用 TrimExcess()。
  12. 【易错点 2】混淆 Clear() 与 RemoveAll(),后者按条件删除,前者无条件全部删除。
  13. 【易错点 3】Clear() 会清除引用类型的引用,但不会立即释放对象内存,GC 才是最终负责回收的。