直觉上我认为是的,但我不确定是否有一些我不知道的约定。
问问题
4654 次
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 回答