如何在 C# 中复制类的实例

2023-12-29

C# 有没有办法复制对象?就像是:

var dupe = MyClass(original);

我希望它们相等,以便所有数据成员都相同,但不共享相同的内存位置。


您可能正在谈论深层复制(深拷贝与浅拷贝 https://stackoverflow.com/questions/184710/what-is-the-difference-between-a-deep-copy-and-a-shallow-copy)?

您必须:

  1. 实现(硬编码)你自己的方法,
  2. 尝试实现(或找到)使用 Reflection 或 Emit 动态执行此操作的实现(解释here https://stackoverflow.com/questions/569154/how-to-deep-copy-between-objects-of-different-types-in-c-net),
  3. 使用序列化和反序列化来创建深拷贝,如果对象被标记为[Serializable]属性。
public static T DeepCopy<T>(T other)
{
    using (MemoryStream ms = new MemoryStream())
    {
        BinaryFormatter formatter = new BinaryFormatter();
        formatter.Serialize(ms, other);
        ms.Position = 0;
        return (T)formatter.Deserialize(ms);
    }
}

要获得浅拷贝,您可以使用Object.MemberwiseClone()方法,但它是一个受保护的方法,这意味着您只能在类内部使用它。

对于所有深层复制方法,重要的是要考虑对其他对象的任何引用或循环引用,这可能会导致创建比您想要的更深的副本。

⚠️安全警告:请阅读有关使用危险BinaryFormatter https://learn.microsoft.com/en-us/dotnet/standard/serialization/binaryformatter-security-guide其中可能包括远程代码执行...您可以使用提供的链接中列出的首选替代方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 C# 中复制类的实例 的相关文章

随机推荐

  • Google 附近的消息 - 取消设备之间的初始链接

    我正在构建一个应用程序来测试 Google 附近消息 API 对于该测试 我使用 DISTANCE TYPE EARSHOT 根据这个线程附近 API 的 Strategy DISTANCE TYPE EARSHOT 似乎并不限制消息接近度
  • 网络聊天或 Skype 上不显示 Rich Card 附件

    Rich Card 附件未在网络聊天或 Skype 上显示 但在模拟器上显示正常 如果我使用 ContentType ContentURL 附件包含正确的数据和属性并且工作正常 但如果我使用丰富的卡片附件 它们不会显示在网络聊天或 Skyp
  • 使用 IIS 在同一服务器上为同一站点运行 node.js 和 Web API

    我正在寻找慢慢转换Node js应用程序转移到ASP NET WebAPI 2 0 我目前正在使用IIS并会坚持IIS 因此 我想将它们托管在同一台服务器上 但将一些 URI 定向到新平台 我将如何在web config 目前的web co
  • 使用 ipython 在 pycharm 中获得真正的代码完成

    许多 python IDE 都声称提供代码完成 代码洞察 PyCharm 就是其中之一 然而 在我看来 提供的代码完成是极其有限的 让我举个例子来让大家清楚地了解一下 import numpy as np m np random rando
  • 主线程超过设定的睡眠时间

    public static AtomicInteger num new AtomicInteger 0 public static void main String args throws Throwable Runnable runnab
  • 沿着 CGPath 的渐变

    我正在绘制一个几乎完整的圆弧 CGContextSetFillColorWithColor context UIColor whiteColor CGColor CGMutablePathRef path CGPathCreateMutab
  • jquery ajax 帖子已取消

    我想跟踪一组页面上一组 UI 组件上的鼠标单击事件 为此 我使用以下 jquery ajax 调用 修剪掉 u 1 Ajax调用将添加点击日志记录 myClickLogger endpoint path to my logging endp
  • 静态对象上的shared_ptr好吗?

    我想知道静态对象上的智能指针是否合理 例如 假设我有一些静态资源 并且想要将该静态资源的引用传递给需要这些资源使用的其他对象 一种方法是使用指向该资源的原始指针 但现在我想知道智能指针 shared ptr 是否是更好的方法 如果是 如何正
  • 如何在 MySQL 中将持续时间值存储为 TIME 数据类型?

    我需要以分钟 秒为单位存储歌曲持续时间 我需要使用 TIME 但是当我编写 INSERT 语句时如何引用某个持续时间 我在表中的数据类型已经是 TIME 我应该只使用 STR TO DATE 字符串值 4 29 吗 首先 看一下这里 htt
  • 在 Postgres 字符串数组上创建不区分大小写的索引

    我正在使用一个varchar Postgres 9 2 中的列 varchar 数组 用于存储一些标签 在按标签检索行时 我希望查询不区分大小写 但是 我想保留在 UI 中显示的大小写 因此我不能只将所有内容存储为小写 所以 我的问题是如何
  • 本机链接失败,重复符号:“_main”,同时添加本机 Binding Dll 和 Xamarin.Firebase.iOS.Database

    我尝试使用 NuGet 在我的 Xamarin 项目中添加和实现本机 Binding Dll 和 Xamarin Firebase iOS Database 但由于以下错误 我无法构建我的项目 错误 MT5213 重复符号位于 obj iP
  • 如何将 javascript 变量的值赋给 php 变量

    我有一个表格
  • postgres:复合全文/btree 索引

    我想对一列进行全文搜索并在另一列中进行排序 如果我分别为这两列建立索引 postgres 就不能在此查询中使用这两个索引 有没有办法创建可以在这种情况下使用的复合索引 不幸的是没有 虽然您可以通过以下方式将标量列附加到 GIN 索引btre
  • 求numpy中n个点到m个点之间的平方距离

    我有 2 个 numpy 数组 比如说X and Y 其中每一行代表一个点向量 我想找到 X 中每个点到 Y 中每个点之间的平方欧氏距离 将称为 距离 我希望输出是矩阵 D 其中D i j is dist X i Y j 我有以下基于以下
  • 当传播设置为 Propagation.NOT_SUPPORTED 时 Hibernate 和 TransactionRequiredException

    TL DR 服务方法注释为 Transactional propagation Propagation NOT SUPPORTED Hibernate 5 0 4 Final 一切按预期工作 方法在没有事务的情况下执行 休眠 5 2 5 最
  • 存储变量数据

    我正在使用 ASP NET C MVC3 和 SQL Server 2008 构建一个应用程序 向用户提供一个表格供其填写 姓名 电子邮件 地址等 我希望允许应用程序管理员在此表单中添加额外的动态问题 额外问题的数量和返回的数据类型会有所不
  • Laravel Dusk,DatabaseTransactions 不执行回滚

    我正在使用 Laravel Dusk 以下注册测试工作正常 只是它不会回滚事务 即在 注册 上创建的用户记录始终保留在数据库中 我的表都设置为使用 InnoDB 引擎 对发生的事情有什么想法吗 我在很多地方都放了日志 看起来没有什么特别错误
  • 从专用网卡访问时,Rails 显示 IP 为 127.0.0.1,但 Nginx 显示正确的 IP。公共 IP 转发良好

    我们正在 Unicorn Nginx 上运行 Rails 应用程序 服务器有两个我们使用的网卡 eth0处理公共互联网的请求 以及eth2处理来自我们专用网络的请求 当请求通过时eth0 nginx日志显示公共IP Rails日志也显示此I
  • 在 xcode 中添加另一个团队

    这个问题不是重复的在 xcode 中添加另一个团队 https stackoverflow com questions 32610740 adding another team to xcode or 受邀加入开发团队时如何从 Xcode
  • 如何在 C# 中复制类的实例

    C 有没有办法复制对象 就像是 var dupe MyClass original 我希望它们相等 以便所有数据成员都相同 但不共享相同的内存位置 您可能正在谈论深层复制 深拷贝与浅拷贝 https stackoverflow com qu