全知全能を目指す人のありがたい雑記

何かしら意味のあるありがた~い話か、意味のない雑念だらけの日記を書く予定です。

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);
       }
   }
}