.net 浅复制

news/2024/4/19 19:49:55/

你可以使用C#编程语言来编写一个通用的扩展方法,用于将一个对象的值复制到另一个对象,并且修改目标对象的属性时原始对象不受影响。

以下是一个示例代码:

       public static T ShallowCopy<T>(this T original) where T : class{if (original == null){return null;}// 创建一个新实例T copy = Activator.CreateInstance<T>();// 获取原始对象的所有属性var properties = typeof(T).GetProperties();foreach (var property in properties){// 如果属性是一个引用类型或是List集合,进行浅拷贝if (property.PropertyType.IsClass && property.PropertyType != typeof(string)|| property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(List<>)){var originalValue = property.GetValue(original);if (originalValue != null){if (property.PropertyType.IsGenericType && property.PropertyType.GetGenericTypeDefinition() == typeof(List<>)){// 如果属性是List集合,复制集合元素var originalList = (System.Collections.IList)originalValue;var copyList = (System.Collections.IList)Activator.CreateInstance(property.PropertyType);foreach (var item in originalList){copyList.Add(item);}property.SetValue(copy, copyList);如果属性是List集合,复制集合元素//var originalList = (System.Collections.IList)originalValue;//var copyList = originalList.Cast<object>().ToList();//property.SetValue(copy, copyList);}else{// 其他引用类型的属性,进行递归浅拷贝var clonedObject = ShallowCopy(originalValue);property.SetValue(copy, clonedObject);}}}else{// 该属性是一个值类型,直接复制var originalValue = property.GetValue(original);property.SetValue(copy, originalValue);}}return copy;}

可以按照以下方式使用该扩展方法:

public class A
{public int Foo { get; set; }public string Bar { get; set; }
}public class B
{public int Foo { get; set; }public string Bar { get; set; }
}public class Program
{static void Main(){A a = new A { Foo = 42, Bar = "Hello" };B b = new B();b=a.ShallowCopy();Console.WriteLine($"a: Foo = {a.Foo}, Bar = {a.Bar}");Console.WriteLine($"b: Foo = {b.Foo}, Bar = {b.Bar}");b.Foo = 100; // 修改b对象的属性值Console.WriteLine($"a: Foo = {a.Foo}, Bar = {a.Bar}");Console.WriteLine($"b: Foo = {b.Foo}, Bar = {b.Bar}");}
}


http://www.ppmy.cn/news/943145.html

相关文章

在LLM的支持下使游戏NPC具有记忆化的方法

问题 使用GPT这样的LLM去处理游戏中的NPC和玩家的对话是个很好的点子&#xff0c;那么如何处理记忆化的问题呢。 因为LLM的输入tokens是有限制的&#xff0c;所以伴随着问题的记忆context是有窗口大小限制的&#xff0c;将所有的记忆输入LLM并不现实。 所以这里看到了stanfo…

【Python】简单计算器实现(四)

解决思路&#xff1a;最后&#xff0c;我们来看看最简单的运算函数和判断运算符函数。 定义函数&#xff1a;def calculate(n1, n2, operator) param n1: floatparam n2: floatparam operator: - * /return: float def calculate(n1, n2, operator):result 0if operator …

win7,win10下删除HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\报错

在调试虚拟网卡驱动时&#xff0c;由于修改错误&#xff0c;导致枚举顺序错乱&#xff0c;因此通过删除HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Enum\Root\WINTUN下的所有项&#xff0c;即可&#xff0c;win10可用。 1、下载PStools&#xff1a; http://technet.microsoft.c…

【懒人版】labview 软件加密+试用期限制+绑定硬件

labview编译的软件如何在无加密狗的情况下绑定系统硬件生成机器码和注册码&#xff0c;增加试用期功能。获取硬件序列号&#xff0c;对序列号加密&#xff0c;通用密钥生成机器码&#xff0c;在客户端生成机器码&#xff0c;在服务器端生成注册码。 该例程实现如下功能&#xf…

STM32软件加密

摘要&#xff1a; 知识产权的保护&#xff0c;如何让自已辛勤的劳动成果不被别人抄袭&#xff0c;采用有效的手段对IC加密是值得每一个设计者关注的问题。 当然&#xff0c;有人说&#xff0c;没有解不了密的IC&#xff0c;的确&#xff0c;解密是一项技术&#xff0c;只要有人…

RK3399平台开发系列讲解(项目实践篇)1.10、如何完成软硬件的绑定,从而做到软件加密

平台内核版本安卓版本RK3399Linux4.4Android7.1文章目录 目标思路加密芯片方式(嵌入式产品设计初期)GPIO 管脚上下拉方式(嵌入式产品成熟阶段)目标 防止软件被别人盗用比较有效的方法是通过软件和硬件配合修改,起到软硬件绑定的作用。 分两种情况: 设计初期,电路设计阶…

加密狗厂商及工作原理介绍

加密狗厂商及工作原理介绍 厂商介绍工作原理加密方案主要特点 厂商介绍 在当今中国市场上最主要的加密锁品牌有&#xff1a;   1、美国彩虹公司&#xff08;也是最早做硬件加密的公司&#xff09;的国产品牌“加密狗”、美国品牌“圣天诺软件加密锁”&#xff1b;    2、阿…

软件加密方案简介

做为软件开发者,研究好软件加密的确很重要,不过也很有必要多了解一些关于加密狗解密和破解的知识,加密和破解就像矛和盾一样,对于解密知识了解的越多,那么编写的加密代码就越好,要知道加密永远都比解密要容易的多,只有知己知彼,方能百战百胜。 以下就针对使用加密狗…

【miscellaneous】软件加密方法

原文&#xff1a;http://www.jiamisoft.com/blog/3471-ruanjianjiamifangfa.html 软件行业的加密是软件厂商为了保护软件开发的利润而采取的一种软件保护方式。当前&#xff0c;软件加密方法多种多样&#xff0c;从实现形式上经历了两个阶段&#xff1a;不依赖硬件的加密&#…

基于机器学习的恶意软件加密流量检测研究分享

1 概述2 恶意软件加密流量介绍3 加密HTTPS流量解析4 特征工程5 模型效果6 具体实施7 总结 1 概述 近年来随着HTTPS的全面普及&#xff0c;为了确保通信安全和隐私&#xff0c;越来越多的网络流量开始采用HTTPS加密&#xff0c;截止今日&#xff0c;超过65%的网络流量已使用http…

优秀的加密方案-软件加密技巧

概要 ◎设计优秀的加密方案 ◎简单而有效的加密技巧 ◎进一步提高加密强度 ◎通过“软硬兼施”&#xff0c;降低加密成本 ◎通过软件授权&#xff0c;实现多种销售模式 我们需要防御什么 驱动程序替换 这种攻击手段会替换/仿真应用程序用于与保护锁通信的驱动程序&#xff08;基…

python软件加密之一:最简单的时间限制

前言 软件是编程人员的劳动成果&#xff0c;理应受到合理保护&#xff0c;尊重知识产权也是社会进步的重要标志。除了立法等社会因素外&#xff0c;如何保护自己的劳动成果&#xff0c;如何将软件的使用限制在合理的范围和时间内&#xff0c;值得每一位程序员深思。 思路 每次打…

解决appium-doctor报ffmpeg cannot be found

一、下载ffmpeg安装包 https://ffmpeg.org/download.html 找到如图所示红框位置点击下载ffmpeg安装包。 二、配置ffmpeg环境变量 三、检查ffmpeg版本信息 重新管理员打开dos系统cmd命令提示符&#xff0c;输入ffmpeg查看是否出现版本信息&#xff0c;安装完好。 ffmpeg

软件加密狗破解思路和方法

本文介绍的是软件加密狗破解的一般思路和方法&#xff0c;大家可能奇怪&#xff0c;昨天刚刚介绍完“软件加密锁产品评测”&#xff0c;怎么今天就介绍加密狗破解知识&#xff1f;其实做为软件开发者&#xff0c;研究好软件加密的确很重要&#xff0c;不过也很有必要多了解一些…

自己编写c++代码对软件加密

对一个自己开发的程序进行加密&#xff0c;主要思路是先获取目标机器的机器码&#xff08;mac地址或者cpu的序列号&#xff09;。然后写一个简单的加密算法对机器码进行加密&#xff0c;并输出一个license文件。自己开发的程序就读取目标机器码&#xff0c;并读取license文件解…

软件加密的攻与防

纯软件加密加密芯片加密芯片的两种硬件连接形式加密过程加密保护的攻与守 破解思路1&#xff1a;从软件入手&#xff0c;绕开加密点破解思路2&#xff1a;从加密狗的驱动程序入手&#xff0c;伪造驱动程序破解思路3&#xff1a;从加密狗硬件入手&#xff0c;仿制加密狗PUF&…

软件加密方案

对于软件授权&#xff0c;你可以自己做。例如方法可以是 1. 产生一个RSA密钥。 2. 把其公钥导出string形式&#xff0c;直接写在应用程序里。 3. 程序第一次运行&#xff0c;发现没有证书文件&#xff08;例如叫做cert.dat的文件&#xff09;&#xff0c;就采集当前硬件信息、软…

软件加密方式

软件加密方式 加密一词来源已久&#xff0c;自从人们希望对自己私人的信息得到保护开始&#xff0c;就有了加密这个概念。软件行业的加密是软件厂商为了保护软件开发的利润 而采取的一种软件保护方式&#xff0c;加密 的好坏直接影响到软件的销售&#xff0c;从 Apple II 的年…

Scala集合常用函数 - 高级计算函数

水善利万物而不争&#xff0c;处众人之所恶&#xff0c;故几于道&#x1f4a6; 目录 1. 过滤 - filter 2. 转换/映射 - map 3. 扁平化 - flatten 4. 扁平化映射 - flatMap 5. 分组 - groupBy 6. 简化&#xff08;规约&#xff09; - reduce 7. 折叠 - fold 8. 函数小练习 1. 过…

基于Java+SpringBoot+Vue前后端分离校园管理系统详细设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…