public override bool Equals(Object obj)
        {
            if (!(obj is ComplexKey <TId, TName>))
            {
                return(base.Equals(obj));
            }

            ComplexKey <TId, TName> key = obj as ComplexKey <TId, TName>;

            return(key.Id.Equals(Id) && key.Name.Equals(Name));
        }
        public TValue this[ComplexKey <TId, TName> key]
        {
            get
            {
                return(((IDictionary <ComplexKey <TId, TName>, TValue>)collection)[key]);
            }

            set
            {
                ((IDictionary <ComplexKey <TId, TName>, TValue>)collection)[key] = value;
            }
        }
 public bool TryGetValue(ComplexKey <TId, TName> key, out TValue value)
 {
     return(((IDictionary <ComplexKey <TId, TName>, TValue>)collection).TryGetValue(key, out value));
 }
 public bool Remove(ComplexKey <TId, TName> key)
 {
     return(((IDictionary <ComplexKey <TId, TName>, TValue>)collection).Remove(key));
 }
        public void Add(TId id, TName name, TValue value)
        {
            ComplexKey <TId, TName> key = new ComplexKey <TId, TName>(id, name);

            collection.Add(key, value);
        }
 public void Add(ComplexKey <TId, TName> key, TValue value)
 {
     collection.Add(key, value);
 }
 public bool ContainsKey(ComplexKey <TId, TName> key)
 {
     return(((IDictionary <ComplexKey <TId, TName>, TValue>)collection).ContainsKey(key));
 }