Dictionary でインデクサを使ってアクセスした際に該当するキーが無いと、KeyNotFoundException がスローされる。
例外が発生しないようにするためには、Dictionary#ContainsKey を使ってチェックすることになる。
そんなの効率悪いよーって人のために Dictionary#TryGetValue がある(らしい)。
using System; using System.Collections.Generic; class Class1 { static void Main(string[] args) { Dictionary<string, string> dict = new Dictionary<string, string>() { {"fuga" , "FUGA"} }; string hoge = "ooooooooooooooooooooooooooooo"; // dictionary に含まれる場合は hoge にその値が入る Console.WriteLine(dict.TryGetValue("fuga", out hoge)); //=> True Console.WriteLine("hoge = " + hoge); //=> Fuga hoge = "ooooooooooooooooooooooooooooo"; // dictionary に含まれない場合は string の "既定の値" が入る。 Console.WriteLine(dict.TryGetValue("fuga2", out hoge)); //=> False Console.WriteLine("hoge = " + hoge); //=> } }
キーがない場合に、hoge の値が返るわけじゃなくて、hoge の型の規定値が帰ってくる。
これ、ほんとに便利なんだろうか・・・・。嬉しいパターンが良く分からん。