public TValue this[TKeyA keyA, TKeyB keyB, TKeyC keyC]
 {
     get
     {
         var key = KeyTriple.Create(keyA, keyB, keyC);
         return(base.ContainsKey(key) ? base[key] : default(TValue));
     }
     set
     {
         var key = KeyTriple.Create(keyA, keyB, keyC);
         if (!ContainsKey(key))
         {
             base.Add(key, value);
         }
         this[key] = value;
     }
 }
 public void Add(TKeyA keyA, TKeyB keyB, TKeyC keyC, TValue value)
 {
     base.Add(KeyTriple.Create(keyA, keyB, keyC), value);;
 }
    public bool ContainsKey(TKeyA keyA, TKeyB keyB, TKeyC keyC)
    {
        var key = KeyTriple.Create(keyA, keyB, keyC);

        return(base.ContainsKey(key));
    }