直觉我认为是的,但我不确定是否有一些我不了解的惯例。
答案 0 :(得分:6)
由于我们无法知道实施是什么,唯一安全的答案是“是”。
但是,直接使用IEnumerator
非常罕见 - foreach
更为常见。对于通用IEnumerator<T>
,您可以使用using语句:
using(var iter = obj.GetEnumerator()) {
...
}
即使没有通用版本,您也可以作弊:
IEnumerator iter = obj.GetEnumerator();
using(iter as IDisposable) {
...
}
如果它是IDisposable将会处置它
答案 1 :(得分:0)
永远不会丢弃一次性物品 [1]
但他们应该。由于using
块使用finally
子句进行处理,无论using
块是正常退出还是通过异常执行,都会执行此操作,默认情况下即使面对异常也要处置
[1] 我想有人可能会有一个错误的实现,其中包含非托管资源且没有终结者,但正确的操作是实现终结者。