c# - 为什么 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>
准确地说)需要实施IDisposable
?Enumerator
本身是一个结构,不包含任何非托管资源。如果这意味着T
可能是处理非托管资源的类型,那么您应该将 dispose 方法委托给List<T>
,因此当您从列表中删除项目时,List 将调用已删除项目的 Dispose 方法,但List<T>
没有任何Dispose
方法。
解决方案
推荐阅读
- c - 以下 va_arg 宏如何工作?
- c# - 我需要这个具有十六进制数字的特定颜色,是否可以在这部分代码中添加它?
- python - Python 中表示未使用的模块导入的惯用方式是有意的
- php - In PHP it possible to use microtime() inside another microtime()?
- c - 如何格式化设备数据表中的 I2C 数据?
- angular - How to delete user account from firebase with angular
- ios - Why are my iOS images not appearing when I run my app?
- python - problem in showing all images from folder python
- jquery - Pop up menu that closes when I don't hold it in css active class
- excel - 使用 VBA 的搜索按钮