AccessViolation Exception

仕事でもはんだづけ、家でもはんだづけ

c#のIEnumerableはListやArrayに変換するとき再計算される

c# IEnumerable lazy eval

無限リストを適当にTakeすることによって実現している簡単な例であるが、ToArray()をするタイミングで初めて計算されるのと、二回目のToArray()の時はまた再計算されていることから乱数の無限リストは同一のものではなくなってしまう。

考えて見れば当たり前なことだがちょっとした見落としでバグの温床となってしまった。

むしろ遅延評価せずにやるなら全計算したいタイミングで計算を施すのが吉だろう。状態を持つ変数を参照していた場合などが致命的なバグとなってしまいそうだ