public object GetOrCreate(ObjectNodeKey key, Func<Object> creator)
 {
     if (map.ContainsKey(key))
     {
         return map[key];
     }
     object value = creator();
     map.Add(key, value);
     return value;
 }
 protected bool Equals(ObjectNodeKey other)
 {
     return number == other.number && Equals(type, other.type);
 }
 public bool HasObject(ObjectNodeKey key)
 {
     return map.ContainsKey(key);
 }
 public object GetObject(ObjectNodeKey key)
 {
     return map[key];
 }