public KeyedValueWrapper(TKey key)
 {
     _Key           = key;
     _KeyHasBeenSet = true;
     _TryGetValue   = null;
     _CreateValue   = null;
 }
 public KeyedValueWrapper(Func <TKey, TValue> createValue)
 {
     _Key           = default(TKey);
     _KeyHasBeenSet = false;
     _TryGetValue   = null;
     _CreateValue   = createValue;
 }
 public KeyedValueWrapper(TKey key, TryGetValueFunc <TKey, TValue> tryGetValue, Func <TKey, TValue> createValue)
 {
     _Key           = key;
     _KeyHasBeenSet = true;
     _TryGetValue   = tryGetValue;
     _CreateValue   = createValue;
 }
 public KeyedValueWrapper <TKey, TValue> Change(TryGetValueFunc <TKey, TValue> tryGetValue, Func <TKey, TValue> createValue)
 {
     return(new KeyedValueWrapper <TKey, TValue>(_Key, tryGetValue, createValue));
 }
 public KeyedValueWrapper <TKey, TValue> Change(TKey key, TryGetValueFunc <TKey, TValue> tryGetValue)
 {
     return(new KeyedValueWrapper <TKey, TValue>(key, tryGetValue, _CreateValue));
 }