【问题标题】:Clone an Object that I can't add ICloneable to克隆一个我无法添加 ICloneable 的对象
【发布时间】:2011-08-30 18:46:06
【问题描述】:

我正在尝试创建对象的浅表副本(新实例),而无需手动设置每个字段。这个对象不是我有能力修改的类型,所以我无法进入对象并实现 ICloneable ......我有点卡住了。有没有一种简单的方法来简单地克隆一个对象,或者我必须实现一些 Clone() 方法来简单地将每个字段复制到一个新对象中?

提前感谢您的帮助!

【问题讨论】:

  • 看看AutoMapper@automapper.codeplex.com
  • object.MemberwiseClone 会起作用吗? msdn.microsoft.com/en-us/library/…
  • 如果我能够编辑我想克隆的对象(类文件),那么可以,但是这个对象来自第 3 方 DLL,我无权添加调用 MemberwiseClone() ... 除非我遗漏了什么。

标签: c# clone cloning cloneable


【解决方案1】:

使用反射查看对象上的字段并使用它来填充新实例。

这对存在不带参数的构造函数做出了一些假设。

Type t = typeof(typeToClone);
var fields = t.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
var copy = Activator.CreateInstance(t);
for(int i = 0; i < fields.Length; i++)
  fields[i].SetValue(copy, fields[i].GetValue(existing));

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 2010-09-27
    • 2020-05-01
    • 2020-05-06
    • 2017-11-07
    • 1970-01-01
    • 2013-10-11
    相关资源
    最近更新 更多