如何在 C# 中实现字典类型的深拷贝(Deep Clone)操作?
时间: 2024-10-27 20:07:29 浏览: 44
Java Clone深拷贝与浅拷贝的两种实现方法
在C#中,如果你想要对字典类型(Dictionary<TKey, TValue>)进行深度拷贝,也就是创建一个新的字典,其中包含原字典的所有键值对,并且所有元素都是独立的对象副本,而不是引用,你可以这样做:
```csharp
using System;
using System.Collections.Generic;
public class DeepCloneDictionary<TKey, TValue>
{
public static Dictionary<TKey, TValue> DeepCopy(Dictionary<TKey, TValue> source)
{
if (source == null) return null; // 如果源字典为空,直接返回
var clone = new Dictionary<TKey, TValue>();
foreach (var pair in source)
{
// 对于每个键值对,检查其值是否可以被复制。如果是一个复杂对象,需要递归地调用DeepCopy
if(pair.Value is ICloneable cloneableValue)
clone.Add(pair.Key, (TValue)cloneableValue.Clone());
else if(pair.Value is Dictionary<TKey, TValue> nestedDict)
clone.Add(pair.Key, DeepCopy(nestedDict)); // 如果是嵌套字典,再次进行深度拷贝
else
clone.Add(pair.Key, pair.Value); // 如果值不可复制,直接添加到新字典
}
return clone;
}
}
// 使用示例
Dictionary<int, string> original = new Dictionary<int, string> { { 1, "Hello" } };
Dictionary<int, string> cloned = DeepCloneDictionary<int, string>.DeepCopy(original);
```
阅读全文