如果从ienumerator .movenex()或.Crurnent抛出了例外,是否仍必须处置它?
-
08-10-2019 - |
题
我认为是的,但是我不确定是否有一些我不知道的惯例。
解决方案
由于我们不知道实施是什么,因此唯一安全的答案是“是”。
但是,很少使用 IEnumerator
直接地 - foreach
更普遍。对于通用 IEnumerator<T>
您可以使用使用语句:
using(var iter = obj.GetEnumerator()) {
...
}
即使没有通用版本,您也可以作弊:
IEnumerator iter = obj.GetEnumerator();
using(iter as IDisposable) {
...
}
如果它是可识别的,它将处置iTer
其他提示
没有一次性对象 必须 永远被处置。[1]
但他们 应该 是。作为一个 using
块使用 finally
处置条款,这是执行的 using
块正常或通过例外情况,即使面对例外,默认值是处置。
[1] 我想一个人可能会有一个越野车实施,其中持有非管理资源,并且没有最终确定器,但是实施最终方案的正确措施。
不隶属于 StackOverflow