Anonymous Method(2)

10/31の日記の続き.
だいぶ時間が空いてしまいましたが,問3と問4を動かしてみました.


……よく分からない(^^;;
多分問4は,Sequence.ToArrayを呼んだ時点で問2と同様の展開が行われているということなのでしょう.問2と問3の違いはMyFunc2とMyFunc3でAnonymous MethodをListに入れるかyieldで返すかですが,yieldされたものを直接foreachで使用するのはOK(これは本来の使い方なのだから当たり前?)だけど,問4のようにyieldで返されたものをListに入れてしまうと結局問2と同じことになる……でいいのか?なんか全然自信も根拠もないんですけど.


やっぱりこの辺をきちんと理解しようと思ったら,Anonymous MethodやyieldについてReflector等を使って深いレベルで追いかけるしか無さそう.で,今回もReflectorは使ったのですが,ぱっと見ただけでは全然理解できませんでした.
挑戦しがいのある課題なので,C#3.0が出るまでにクリアしておきたいと思います.