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

StackOverflow https://stackoverflow.com/questions/4416100

質問

直感的にはそうだと思いますが、私が知らないいくつかのコンベンションがあるかどうかはわかりません。

役に立ちましたか?

解決

実装が何であるかがわからないため、唯一の安全な答えは「はい」です。

ただし、使用することは非常にまれです IEnumerator 直接 - foreach より一般的です。ジェネリックのために IEnumerator<T> 使用ステートメントを使用できます。

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

一般的なバージョンがなくても、ごまかすことができます。

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

それが特徴であれば、これはIterを処分します

他のヒント

使い捨てオブジェクトはありません しなければならない 処分されます。[1]

だけどあの人達 したほうがいい なれ。として using ブロックはを使用します finally 処分する条項で、これは実行されます using ブロックは通常または例外を介して終了します。デフォルトは、例外に直面しても廃棄することです。


[1] 非管理されていないリソースが保持され、ファイナリッサーはいないバグのような実装ができると思いますが、最終的なアクションは最終的なものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top