private DualDictionary(
     Dictionary <TKey, TValue> keyToValue,
     Dictionary <TValue, TKey> valueToKey,
     IEqualityComparer <TKey> keyComparer,
     IEqualityComparer <TValue> valueComparer,
     DualDictionary <TValue, TKey> inverse) :
     this(
         keyToValue,
         valueToKey,
         keyComparer,
         valueComparer)
 {
     Inverse = inverse;
 }
 public DualDictionary(
     IEnumerable <KeyValuePair <TKey, TValue> > source,
     IEqualityComparer <TKey> keyComparer,
     IEqualityComparer <TValue> valueComparer) :
     this(
         keyComparer,
         valueComparer)
 {
     foreach (var kvp in source)
     {
         keyToValue.Add(kvp.Key, kvp.Value);
         valueToKey.Add(kvp.Value, kvp.Key);
     }
     Inverse = new DualDictionary <TValue, TKey>(valueToKey, keyToValue, valueComparer, this.KeyComparer, this);
 }
 internal KeyProxy(DualDictionary <TKey, TValue> dict)
 {
     this.dict = dict;
 }