首页 > 系统相关 >C# 对象克隆(深拷贝,不引用对象源的内存地址)

C# 对象克隆(深拷贝,不引用对象源的内存地址)

时间:2024-06-15 15:55:36浏览次数:22  
标签:序列化 克隆 C# 对象 returnObj ms 内存地址 data

对象克隆拓展方法:
/// <summary>
/// 深度克隆对象
/// </summary>
/// <typeparam name="T">要克隆的类型</typeparam>
/// <param name="obj">要克隆的实体</param>
/// <returns>返回克隆到的实体</returns>
public static T Clone<T>(this T obj)
{
    object returnObj;
    using (var ms = new MemoryStream())
    {
        //var data = new BinaryFormatter();//此方式要求被序列化对象要添加特性[Serializable],较麻烦
        var data = new XmlSerializer(typeof(T));
        data.Serialize(ms, obj);//序列化
        ms.Seek(0, SeekOrigin.Begin);
        returnObj = data.Deserialize(ms);//反序列化
        ms.Close();
    }
    return (T)returnObj;

    //此方式依赖于第三方库:Newtonsof.Json,较麻烦
    //return JsonConvert.DeserializeObject<T>(JsonConvert.SerializeObject(obj));
    
    //当然还可以利用反射来进行对象克隆,那就相当麻烦了,不建议!
}

标签:序列化,克隆,C#,对象,returnObj,ms,内存地址,data
From: https://www.cnblogs.com/skyrecord/p/18249379

相关文章

  • ASP.NET Core应用程序11:使用模型绑定
      模型绑定是使用从HTTP请求获得的数据值,创建操作方法和页面处理程序所需的对象的过程。本章描述模型绑定系统的工作方式;显示它如何绑定简单类型、复杂类型和集合;并演示如何控制流程,以指定请求的哪一部分提供应用程序所需的数据值。  本章介绍了模型绑定特性,展示了如何使......
  • 第二章节C代码RUST实现
    第二章节书中代码有如下内容这些C语言代码大致实现了一个简单版的who命令。这个命令的功能是读取系统的utmp文件,并显示当前登录的用户信息。utmp文件包含关于用户登录会话的信息,包括用户名、登录终端、登录时间等。以下是对上述所有代码实现功能的总结:cp1:实现复制文件内......
  • Codeforces Round 836题解(A、B、C)
    A.SSeeeeiinnggDDoouubbllee直接将原字符串翻转一下拼到原字符串的后面就构成了回文串。strings;voidsolve(){cin>>s;cout<<s;reverse(s.begin(),s.end());cout<<s<<'\n';}B.XOR=Average分\(n\)的奇偶性考虑,若\(n\)为奇数,我们可以......
  • 3.4 The Cotrace of Weil Differentials and the Hurwitz Genus
    Definition3.4.1.For\(P\in\mathbb{P}_F\)let\(\mathcal{O}_P^{\prime}:=\operatorname{ic}_{F^{\prime}}\left(\mathcal{O}_P\right)\)denotetheintegralclosureof\(\mathcal{O}_P\)in\(F^{\prime}\).Thentheset\[\mathcal{C}_P:=\......
  • ReentrantReadWriteLock:深度解析与源码探险
    1.概述ReentrantReadWriteLock是Java并发包java.util.concurrent.locks中的一个重要类,它提供了可重入的读写锁功能。与传统的互斥锁(如synchronized或ReentrantLock)不同,ReentrantReadWriteLock允许多个线程同时读取共享资源,但在写入时则要求独占锁。这种设计显著提高了在读......
  • ReentrantLock的非公平锁(NonfairSync)深度解析:源码之旅与实战策略
    1.引言在Java并发编程中,ReentrantLock作为一种可重入的互斥锁,提供了比synchronized更强大和灵活的功能。其中,NonfairSync作为ReentrantLock内部非公平锁的实现,其设计理念和源码实现都体现了对性能和公平性的权衡。2.NonfairSync概述非公平锁特性:新到达的线程在......
  • 支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象
    支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象SPI三方服务接入指南https://opendocs.alipay.com/isv/spiforisv服务端实现Demo以下Demo是通过Java实现的SPI服务样例,包括验签支付宝请求报文、业务逻辑处理、商家加签以及响应报文构造的逻辑。......
  • CPU 时间片轮转机制
    CPU时间片轮转机制我们平时在开发的时候,感觉并没有受cpu核心数的限制,想启动线程就启动线程,哪怕是在单核CPU上,为什么?这是因为操作系统提供了一种CPU时间片轮转机制。时间片轮转调度是一种最古老、最简单、最公平且使用最广的算法,又称RR调度。每个进程被分配一个时间段,......
  • 支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码
    支付宝签名和验签使用JSONObject是最优解。json字符串顺序和==符号都一致演示代码支付宝spi接口设计验签和返回结果加签注意点,支付宝使用JSONObject对象https://www.cnblogs.com/oktokeep/p/18249346packagecom.example.core.mydemo;importcom.alibaba.fastjson.JSON;imp......
  • 阿里云 Ubuntu 22.04.4 LTS 安装postfix+dovecot 搭建邮件服务器
    一安装1安装postfixsudoapt-getinstallpostfix#如果没有弹出配置界面,运行dpkg-reconfigurepostfix     #sudovim/etc/postfix/main.cfsmtpd_banner=$myhostnameESMTP$mail_name(Ubuntu)biff=noappend_dot_mydomain=noreadme_directory=......