http://blogs.wankuma.com/rti/archive/2008/02/18/123652.aspx
イテレータの後始末
の続きです。
上記の NyaRuRu さんのコメントにあったLINQの IEnumerator 連鎖の場合の動きについて、一応自分で検証してみました。
public void Test() {
var q =
from x in Range(0, 3)
from y in Range(0, 3)
from z in Range(0, 3)
select x * 100 + y * 10 + z;
foreach(var x in q) {
Console.WriteLine(x);
return;
// ここで無理やり中断!!
}
}
public IEnumerable<int> Range(int start, int count) {
try {
Console.WriteLine("素敵だし爽やかRさん");
for(var i = start; i < start + count; ++i) yield return i;
}
finally {
Console.WriteLine("わんくま同盟の若きホープ");
}
}
素敵だし爽やかRさん
素敵だし爽やかRさん
素敵だし爽やかRさん
0
わんくま同盟の若きホープ
わんくま同盟の若きホープ
わんくま同盟の若きホープ
予定どおり、きちんと後始末されています。
ここまで来ると、何やかんやと理由をつけて、単に
自画自賛
したいだけなんじゃないかと言われそうな気がします。