Dictionaryでforeach

自分は今までDictionaryを走査する時には以下のようなコードを書いていました。
たぶん今携わってるプロジェクトでもこう書いてます。

class Program {
    static void Main(string[] args) {
        var sampleDict 
            = new Dictionary<string, string> { { "Key1", "Val1" }, { "Key2", "Val2" }, { "Key3", "Val3" } };

        foreach (var key in sampleDict.Keys) {
            Console.WriteLine(string.Format("Key : {0} / Value : {1}", key, sampleDict[key]));
        }
    }
}

ですが、やっぱりこの走査の仕方には疑問があったわけです。
Dictionary(というかIDictionary実装)はKeyとValueのペアとして持っているのに、Key単独でループさせるのって何か直感的じゃない。

そんな訳で重い腰を上げて調べてみると、、やっぱりありました。直感的な方法が。
てゆうか自分が無知なだけ 0;)

以下がその方法で書き換えた版

static void Main(string[] args) {
    var sampleDict 
        = new Dictionary<string, string> { { "Key1", "Val1" }, { "Key2", "Val2" }, { "Key3", "Val3" } };

    foreach (KeyValuePair<string, string> pair in sampleDict) {
        Console.WriteLine(string.Format("Key : {0} / Value : {1}", pair.Key, pair.Value));
    }

    Console.ReadLine();
}

うん、やはりしっくりきます。

補足として、非ジェネリッククラスのHashtableではDictionaryEntryクラスがキーと値のペアをobject型格納するようです。
こんな感じ。

foreach(DictionaryEntry entry in sampleHashTable) {
    Console.WriteLine(entry.Key + " / " + entry.Value);
}

てゆうかなんで俺は今までペアで受ける方法を知らずに生きてきたんだ。。
明日からはこっちを使おう!

written by dany(role of younger brother)