public ReadOnlyDictionary <TKey, TValue> DeepCopy(ReadOnlyDictionary <TKey, TValue> input, CopyContext context) { if (context.TryGetCopy <ReadOnlyDictionary <TKey, TValue> >(input, out var result)) { return(result); } if (input.GetType() != typeof(ReadOnlyDictionary <TKey, TValue>)) { return(context.Copy(input)); } var temp = new Dictionary <TKey, TValue>(input.Count); foreach (var pair in input) { temp[_keyCopier.DeepCopy(pair.Key, context)] = _valueCopier.DeepCopy(pair.Value, context); } result = new ReadOnlyDictionary <TKey, TValue>(temp); context.RecordCopy(input, result); return(result); }