2008年08月05日

IEnumerator<T>は、IDisposableを実装してる

  
今までは、C#でGetEnumerator()を使うときって、

var enumerator = list.GetEnumerator();
while (enumerator.MoveNext()) {
var obj = enumerator.Current;
...
}

て書いてたけど、GetEnumerator()の戻り値であるIEnumerator<T>は、IDisposableを実装してるから、本来は、

using (var enumerator = list.GetEnumerator()) {
while (enumerator.MoveNext()) {
var obj = enumerator.Current;
...
}
}

て usingを書かなくちゃいけないんですね。
今までほとんど意識してませんでした。

えっ、foreach使えばGetEnumeratorは使わないって?
でも、ときどき、GetEnumeratorが必要になるときがあるんです。



この記事へのコメント
Non-Generic な IEnumerator でも IDisposable の検査はしておいた方が良いです.
元々 foreach がそういうマクロなので.

以下関連記事です.ご参考までに.
http://d.hatena.ne.jp/NyaRuRu/20070331/p1
http://d.hatena.ne.jp/NyaRuRu/20080710/p1
Posted by NyaRuRu at 2008年08月06日 06:20
NyaRuRuさん
とても興味深い記事を教えていただいてありがとうございます。
「なぜ」の部分がいまいち理解できていないので、
時間があいたときに、じっくり考えてみます。
Posted by gushwell at 2008年08月06日 12:52
 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/51591065