basyura's blog

あしたになったらほんきだす。

Dictionary#TryGetValue のどのへんが使いやすいんだろうか

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 の型の規定値が帰ってくる。

これ、ほんとに便利なんだろうか・・・・。嬉しいパターンが良く分からん。