C#3.0

 たとえば2.0までは、

StreamReader sr = new StreamReader("hoge.txt")
....
sr.Close()

 これじゃ例外が来たときにCloseされないといって、

using(StreamReader sr = new StreamReader("hoge.txt")){...}

 こんな風にやってたけど、

StreamReader.Open("hoge.txt", reader =>{ ... });

 こんな風にすれば、受け取ったメソッドを実行した後に、必ずCloseすることが保障される。Closeし忘れをなくせる。

 その代わり必ずCloseされてしまう。普通はOpenしたらメソッド内でCloseするけど、そうしたくない場合困ったことになる。

 ライブラリとしてはそれをすることが必ず間違いになるのでない限り出来た方がいい。
 代替手段がない場合は特に。代替手段はあるけど効率が悪いという場合もないとまずい。

 ラムダ式の右側を{}でくくると見た感じよく意味のわからないコードになる。
 インデントが深くなるとどうしてこうわかりにくくなるのだろう。