今まで(C# 2.0)
List<int> ar = new List<int>(); ar.Add(3); ar.Add(1); ar.Add(4); foreach (int item in ar) { Console.WriteLine(item); }
これから(C# 3.0)
List<int> ar = new List<int> { 3, 1, 4 }; ar.ForEach(Console.WriteLine);
2行になっちゃったよ・・・・
メッセージボックスで表示してみる
List<int> ar = new List<int> { 3, 1, 4 }; ar.ForEach(item => MessageBox.Show(item.ToString()));
これはもう笑うしかないな
C++0x + Boost.Lambdaを駆使した↑と同じ処理(めんどくさいのでネームスペース省略)
vector<int> ar = { 3, 1, 4 }; for_each(ar.begin(), ar.end(), cout << _1 << "\n");
C# 3.0は標準でこんなに強力なんですか・・・ラムダ式はすばらしいですね
ついで
コレクション要素の平均値を求める
List<int> ar = new List<int> { 3, 1, 4 }; double average = ar.Average();
なんだこの簡単すぎる実装は・・・
汎用メソッドを作りたいときはIEnumerableを拡張しろってことですか
ただ、拡張メソッドで困ることは、MSDNで調べても拡張されたクラスには拡張メソッドが記載されないということ
(改善されるとは思うが)
C# 3.0は新機能全てが相互にうまく作用しててとてもおもしろいです