克隆任意对象的函数

nf3*_*743 5 c# reflection clone

我正在寻找一种方法来克隆在编译时(或运行时,我认为)未知的对象。问题的确切措辞是“编写一个可以克隆任意对象的函数”例如

  • 将未知对象传递给函数。
  • 返回对象的深层副本。

我猜我需要使用反射来读取函数和变量,然后了解如何创建一个新对象并将这些值分配给它。我可以只使用 Type.GetType() 来查找类型并创建一个新实例,然后使用这个已知对象的复制构造函数。但是我不确定给定的类是否会实现(深度),或者问题是否要求这样的解决方案(无助于我不明白所需的结果是什么!)。

有人可以指导我朝着正确的方向前进,需要类/接口,如果您愿意的话,可以使用伪代码来实现这一目标吗?

小智 3

这可以通过利用

Type newObjectType = orgObject.GetType()
Run Code Online (Sandbox Code Playgroud)

然后调用 Activator.CreateInstance(newObjectType)。然后您要做的就是循环遍历该对象的所有属性并将它们设置在新对象上。这也可以通过反射来完成。

循环遍历 orgObject.GetType().GetProperties() 中的每个 PropertyInfo 并在新对象上设置值。

这确实应该创建对象的“深层”副本,无论它是什么类型。

编辑:我上面解释的方法的未经测试的代码示例。

Type newObjectType = orgObject.GetType();
object newObject = Activator.CreateInstance(newObjectType);

foreach (var propInfo in orgObject.GetType().GetProperties())
{
    object orgValue = propInfo.GetValue(orgObject, null);

    // set the value of the new object
    propInfo.SetValue(newObject, orgValue, null);
}
Run Code Online (Sandbox Code Playgroud)

希望你能明白一些!