Ienumerator .movenext()または.currentから例外がスローされている場合、まだ処分する必要がありますか?
-
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