在 .NET 中创建通用字典的深层副本
克隆或执行通用字典的深层副本() 对于保留原始数据结构而不影响原始数据至关重要。以下是一些方法:
浅克隆的 ToDictionary() 方法:
如果您只需要复制键和值引用的浅副本,则
var originalDict = new Dictionary<string, int> { { "Key1", 1 }, { "Key2", 2 } }; var shallowCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => entry.Value);
请参见 cref="System.Linq.Enumerable.ToDictionary{TSource, TKey, TElement}(IEnumerable{TSource}, Func{TSource, TKey}, Func{TSource, TElement})"/>可以使用方法。以下示例演示了浅复制:
具有深度克隆的ToDictionary()方法:
class CloneableValue : ICloneable { public int Value { get; set; } public object Clone() { return new CloneableValue { Value = this.Value }; } } Dictionary<string, CloneableValue> originalDict = new Dictionary<string, CloneableValue> { { "Key1", new CloneableValue() { Value = 1 } } }; var deepCopyDict = originalDict.ToDictionary(entry => entry.Key, entry => (CloneableValue)entry.Value.Clone());
如果您需要深度复制,其中嵌套对象也被递归复制,您可以使用
自定义克隆方法:
public static Dictionary<string, T> CloneDictionary<T>(Dictionary<string, T> originalDict) { Dictionary<string, T> cloneDict = new Dictionary<string, T>(); foreach (KeyValuePair<string, T> entry in originalDict) { cloneDict.Add(entry.Key, (T)entry.Value); } return cloneDict; }
或者,您可以创建特定于您的数据结构的自定义克隆方法。此方法将迭代字典,创建键和值对象的新实例,并相应地分配值。这是一个示例:
方法的选择取决于所需克隆的深度和应用程序的具体要求。 具有适当的键和元素选择器的方法提供了一种创建浅拷贝和深拷贝的通用方法。以上是如何在 .NET 中创建通用字典的深层副本?的详细内容。更多信息请关注PHP中文网其他相关文章!