基本上,我一直在寻找克隆对象并复制其属性的方法,然后添加一个。看起来傻傻的创建一个类,继承现有的对象然后有一堆 this.prop = obj.prop;
我认为可能有一种简单的方法可以通过反射和循环遍历obj的属性来设置'this'的属性。想法?
答案 0 :(得分:3)
是的,你可以用反射来做到这一点:
http://wraithnath.blogspot.com/2011/01/how-to-copy-and-object-with-reflection.html
//Copy the properties
foreach ( PropertyInfo oPropertyInfo in oCostDept.GetType().GetProperties() )
{
//Check the method is not static
if ( !oPropertyInfo.GetGetMethod().IsStatic )
{
//Check this property can write
if ( this.GetType().GetProperty( oPropertyInfo.Name ).CanWrite )
{
//Check the supplied property can read
if ( oPropertyInfo.CanRead )
{
//Update the properties on this object
this.GetType().GetProperty( oPropertyInfo.Name ).SetValue( this, oPropertyInfo.GetValue( oCostDept, null ), null );
}
}
}
}
[1]:http://wraithnath.blogspot.com/2011/01/how-to-copy-and-object-with-reflection.html“
答案 1 :(得分:1)
您可以查看AutoMapper。
答案 2 :(得分:1)
这一切都取决于你想要的克隆种类。如果你想要浅层克隆,那就很容易了。循环遍历对象的属性并在克隆上设置它们就可以做到这一点。但这意味着包含引用的属性将引用与克隆源相同的对象。
如果您想要深度克隆,则必须找到一种方法来克隆源对象拥有的引用(以及源所拥有的引用所拥有的引用等)。如果这些引用没有默认构造函数,则可能无法以自动方式执行此操作。
根据我的经验,如果你有一个非平凡的类和/或类层次结构(特别是有不存在的默认构造函数的可能性),最简单,最可靠的方法是,只写一个“复制构造函数”(在.NET中不存在),并自己完成工作,实现ICloneable
,自己完成工作,或者实现自己的克隆方法,自己做的工作;)
答案 3 :(得分:0)
如果类是可序列化的,您可以使用Xml serialization序列化一个类,然后反序列化到另一个类。