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 に答える