2011-08-30 17 views
4

我想创建一个对象的浅拷贝(新实例),而不需要手动设置每个字段。这个对象不是我能够修改的类型,所以我不能进入对象并实现ICloneable ...我有点卡住了。是否有一种简单的方法来简单地克隆一个对象,还是必须实现一些Clone()方法,将每个字段复制到一个新的对象中?克隆一个对象,我不能添加ICloneable到

在此先感谢您的帮助!

+0

看看AutoMapper @ http://automapper.codeplex.com/ – Chandu

+0

将object.MemberwiseClone的工作? http://msdn.microsoft.com/en-us/library/system.object.memberwiseclone.aspx – cadrell0

+0

如果我能够编辑对象(类文件),我想克隆然后是的,但是这个对象是从第3第三方DLL,并且我没有权限添加调用MemberwiseClone()的能力......除非我错过了一些东西。 – MattW

回答

5

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

这使得一些关于存在没有参数的构造函数的假设。

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)); 
+0

这个伎俩......谢谢! – MattW