LINQのForEachメソッドで気になる点
なぜListクラスだけにForEachメソッドが定義されているのか?
「普通にIEnumerableに定義してしまえば良いじゃん」って思ったけど、単純な話ではないみたいだ。
疑問の発端が、次のコードのようにDictionaryクラスでForEachメソッドを使おうと思ったことだった。
dic.ForEach((v,k) => Console.WriteLine("{0}\t{1}",v,k));
上記コードは、DictionaryクラスにForEachメソッドがないので怒られる。
もしこの書き方ができるなら、単純な処理だけを繰り返して実行したいときにいちいちforeach文でコードブロックを作らずとも同じ結果をもらえるので、読みやすく感じる。しかし無いらしい。
まあ、こういう拡張メソッドを作ってしまえば良いだけの話ではある。
static DictionaryExtension{ public static void ForEach<T>(this Dictionary<T, T> dic, Action<T,T> action) { foreach (var item in dic) { action(item.Key,item.Value); } } }