首页 > 解决方案 > 为什么 Enumerator 需要实现 IDisposable?

问题描述

以下是List<T> https://referencesource.microsoft.com/#mscorlib/system/collections/generic/list.cs,1140的源代码:

public class List<T> : IList<T>, IList, IReadOnlyList<T> {   // List doen't implement IDisposable 
   ...
   public Enumerator GetEnumerator() {
      return new Enumerator(this);
   }

   // List<T> contains a nested enumerator
   public struct Enumerator : IEnumerator<T>, System.Collections.IEnumerator {  // note that IEnumerator<T> implement IDisposable
      private List<T> list;
      ...
      public void Dispose() { }  // does nothing, looks redundant
      ...
   }
}

我的问题是,为什么Enumerator(或者IEnumerator<T>准确地说)需要实施IDisposableEnumerator本身是一个结构,不包含任何非托管资源。如果这意味着T可能是处理非托管资源的类型,那么您应该将 dispose 方法委托给List<T>,因此当您从列表中删除项目时,List 将调用已删除项目的 Dispose 方法,但List<T>没有任何Dispose方法。

标签: c#.net

解决方案


推荐阅读