首页 > 后端开发 > C++ > 如何在 .NET 中创建通用字典的深层副本?

如何在 .NET 中创建通用字典的深层副本?

Patricia Arquette
发布: 2025-01-04 15:16:39
原创
374 人浏览过

How to Create Deep Copies of Generic Dictionaries in .NET?

在 .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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板