2

直觉上我认为是的,但我不确定是否有一些我不知道的约定。

4

2 回答 2

7

由于我们不知道实现是什么,唯一安全的答案是“是”。

然而,直接使用是非常罕见的IEnumerator——foreach更常见。对于泛型IEnumerator<T>,您可以使用 using 语句:

using(var iter = obj.GetEnumerator()) {
    ...
}

即使没有通用版本,您也可以作弊:

IEnumerator iter = obj.GetEnumerator();
using(iter as IDisposable) {
    ...
}

如果它是 IDisposable,它将处理 iter

于 2010-12-11T09:47:29.840 回答
0

任何一次性物品不得丢弃。[1]

但他们应该是。由于using块使用finally子句进行处理,并且无论using块是正常退出还是通过异常退出,都会执行此操作,因此默认情况下即使遇到异常也会进行处理。


[1]我想可能会有一个错误的实现,其中持有非托管资源并且没有终结器,但正确的操作是实现终结器。

于 2010-12-11T09:52:40.950 回答