首页 > 编程语言 >C# 字典Dictionary 深拷贝方法

C# 字典Dictionary 深拷贝方法

时间:2023-10-25 17:24:39浏览次数:42  
标签:Dictionary C# changeScriptInfo Mapster 拷贝 字典

C# 的字典暂时不支持默认的Clone方法,网上的不少字典Dictionary克隆方法大多是浅拷贝方法,例如:

 1 /// <summary>
 2 ///  需要修改的文件信息,用于 分布式提取数据
 3 /// </summary>
 4 public class ChangeScriptInformation
 5 {
 6     public string fileName;           // 要修改的 文件名
 7     public string changeFindString;   // 需要修改的文件内容
 8     public string changeAttribute;    // 修改属性(如何修改)
 9     public string changeResultString; // 对应的修改结果
10 }
11 Dictionary<string, List<ChangeScriptInformation>> changeScriptInfo = new Dictionary<string, List<ChangeScriptInformation>>();  // 需要修改的文件信息,用于 分布式提取数据
12 for (int i = 0; i < controlScript.Length; i++)
13 {
14     if (!changeScriptInfo.ContainsKey(controlScript[i]))
15     {
16         List<ChangeScriptInformation> listChangeScriptInfo = new List<ChangeScriptInformation>();
17         changeScriptInfo.Add(controlScript[i], listChangeScriptInfo);
18     }
19     ChangeScriptInformation change = new ChangeScriptInformation();
20     change.fileName = controlScript[i];
21     change.changeFindString = controlScriptFileFind[i];
22     change.changeAttribute = controlAttribute[i];
23     changeScriptInfo[controlScript[i]].Add(change);
24 }
25 
26 serversInformation[targetServer[i].ToString()].changeScriptInformation = new Dictionary<string, List<ChangeScriptInformation>>(changeScriptInfo);  // 浅拷贝
27 serversInformation[targetServer[i].ToString()].changeScriptInformation = changeScriptInfo.ToDictionary(entry => entry.Key, entry => entry.Value);  // 浅拷贝

这样的方法只能完成对字典 Dictionary<string, List<ChangeScriptInformation>> changeScriptInfo 的浅拷贝,网上推荐的深拷贝方法多是使用反射或序列化来实现的,根据相关资料,这样的深拷贝方式十分影响程序的执行,如果需要提高效率,可以借助C#对象映射器来实现,比如:AutoMapper 和 Mapster,本文重点介绍使用 Mapster 进行字典深拷贝的操作方法:

 

1. 在VS NuGet软件包管理器中,搜索并安装 Mapster,注意针对 .NET Framework 4.7.2,需要安装 Mapster 7.3.0,7.4.0不兼容。

 2. Mapster安装完毕后,在代码页面要声明引用,如下:

1 using Mapster;  // 对象映射器

 3. 使用如下方式实现上述案例的深拷贝:

字典1=字典2.Adapt<字典2结构>();

1 serversInformation[targetServer[i].ToString()].changeScriptInformation = changeScriptInfo.Adapt<Dictionary<string, List<ChangeScriptInformation>>>();   // 使用对象映射器进行 深拷贝

 

 

参考资料:

c#实现深拷贝的几种方式及效率对比_automapper 深拷贝_EverestVIP的博客-CSDN博客

C# Mapster 对象映射器(C#对象映射器) - 一颗花生豆 - 博客园 (cnblogs.com)

标签:Dictionary,C#,changeScriptInfo,Mapster,拷贝,字典
From: https://www.cnblogs.com/lijinying/p/17787701.html

相关文章

  • 【有奖体验】AIGC小说创作大赛开启!通义千问X函数计算部署AI助手
    一个AI助手到底能做什么?可以书写小说可以解析编写代码可以鼓舞心灵提供职业建议还有更多能力需要您自己去探索。接下来我们将花费5分钟,基于函数计算X通义千问部署一个AI助手,帮你撰写各类文案。领取函数计算试用额度首次开通函数计算,务必领取试用资源,首次开通用户......
  • pytest报错UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc3 in position 1
    报错UnicodeDecodeError:'utf-8'codeccan'tdecodebyte0xc3inposition11:invalidcontinuationbyte代码运行时,报错 可以看出是编码的问题,根据提示,有可能是__init__.py文件的问题,通过查看源代码:尝试改变"utf-8"为“gbk"路径:C:\python3.8\Lib\site-packages\inic......
  • IOC和DI详解
    一、IOC控制反转它是一个概念,是一种思想。控制反转就是对对象控制权的转移,从程序代码本身反转到了外部容器。把对象的创建、初始化、销毁等工作交给spring容器来做。由spring容器控制对象的生命周期。即是将new的过程交给spring容器去处理二、DI依赖注入:依赖注入DI是指程序运......
  • 获取 el-cascader 的输入值
    问题场景使用el-cascader级联选择器时,设置filterable可搜索选项。但怎样获取输入框的输入值呢?解决官方文档给出了如下事件:其中change事件获取到的是选中的选项的值,如果输入值不符合选项值(即没有选中),则无法获取输入值。那么为了获取到输入值,就只有用blur事件,即失去焦......
  • TypeScript入门到精通——TypeScript类型系统基础——函数类型
    函数类型一、常规参数类型 在函数形式参数列表中,为参数添加类型注解就能够定义参数的类型。例如,在下列中将add函数声明中的参数x和参数y的类型都定义为number类型。functionadd(x:number,y:number){returnx+y;} 针对函数表达式和匿名函数,我们也可......
  • 【赛后总结】CF 补题合集
    CodeforcesRound882退役后半年多回来的第一场CF,战绩惨重(我觉得这场质量很不错,还可以巩固一下位运算知识,A.TheManwhobecameaGodyzy巨佬使用dp做的,而本人不是很擅长dp,用了一个贪心。观察样例可得\(f(x)\)实际上是对一个区间求它的差分数组的和,即\(\sum\limits_{......
  • CSP 2023 游记
    Day-35初赛,不在状态。看到了一车的小学生,虽然我也是。J78pts,S61pts,不知道S为啥那么高,总之两个都过了。Day-20~-16国庆来到GF集训,面到了@VitrelosTia,看见了非常有实力又有\(6\)级勾又AK了CSP-J的学长lbw。Day-1没干什么。Day0早上考J。有点冷,穿了......
  • VirtualBox上安装CentOS7
    下载CentOS7ISO镜像文件:前往CentOS官方网站的镜像下载页面:Download在页面上找到适合你系统架构的CentOS7ISO镜像文件,并下载到本地。安装VirtualBox:前往VirtualBox官方网站的下载页面:Downloads–OracleVMVirtualBox根据你的操作系统,选择合适的......
  • centos os7 和redhat 7 安装yum源失败的解决办法
    首先看我的报错[Errno14]curl#6-"Couldnotresolvehost:mirrors.aliyun.com;Unknownerror"yum源配置出现了问题cd/etc/yum.repos.d/vilocal.repo#里面装的是Centos-7.repoCentos-Base.repo查看内容如下#CentOS-Base.repo##Themirrorsystemusestheconne......
  • docker相关命令
    一、概述主要记录一下常用的docker命令。参考博客二、命令说明1.docker相关命令1.启动dockersystemctlstartdocker2.停止dockersystemctlstopdocker3.重启dockersystemctlrestartdocker4.查看docker的状态systemctlstatusdocker5.开机启动docker......