関数の実行結果をキャッシュするDictionary

 関数の実行結果をキャッシュすると言うか、keyに対応したvalueが自動生成されるディクショナリ。

class LazyDictionary<TKey, TValue>
{
  Dictionary<TKey, TValue> dic;
  Func<Tkey, TValue> valueCreator;

  public LazyDictionary(Dictionary<TKey, TValue> dic, Func<TKey, TValue> valueCreator){ 
    this.dic = dic; this.valueCreator = valueCreator;
  }

  public TValue this[TKey key}{
    get{
      TValue value;
      if(dic.TryGetValue(key, out value) == false){
        value = valueCreator(key);
        dic.Add(key, value);
      }
      return value;
    }
  }
}

 これがすごく便利。寝て起きて見たらひどいミスがあった。最近調子悪いな。