我在寻找一种方式来克隆未在编译时已知对象(或运行时,我认为)。 这个问题的确切措辞是“写的是可以克隆任意对象的功能”,例如
我猜我将需要使用反射来读取函数和变量,然后一些如何创建一个新的对象,然后将这些值指定给它。 我可以只使用Type.GetType()来查找类型并创建一个新实例,然后使用这个已知对象的拷贝构造函数。 但我不知道一个给定的类是否会有一个执行(深),或问题是否要求这样的解决方案(没有帮助,我不明白所需要的结果是什么!)。
可能有人指导我在正确的方向,与所需的类/接口和伪代码,如果你感觉大方,要实现这一目标?
这可以通过利用来实现
Type newObjectType = orgObject.GetType()
然后调用Activator.CreateInstance(newObjectType)。 那么,什么你需要做的就是通过对象的所有属性循环,并将它们设置新对象。 这也可以通过反射来完成。
通过每个的PropertyInfo在orgObject.GetType()循环。的GetProperties()和设置新的对象上的值。
这确实应该创建对象的“深”的副本,独立的它是什么类型。
编辑:我上面所解释的方法的未经测试的代码示例。
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);
}
希望你得到了一些清晰!
你可以简单地Serialize
和Deserialize
对象进行克隆。
下面的函数将这样做:
public object Clone(object obj)
{
MemoryStream ms = new MemoryStream();
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(ms, obj);
ms.Position = 0;
object obj_clone = bf.Deserialize(ms);
ms.Close();
return obj_clone;
}