【发布时间】:2011-11-18 11:14:20
【问题描述】:
我有两个相同类型的对象,需要将属性值从一个对象复制到另一个对象。有两种选择:
使用反射,浏览第一个对象的属性并复制值。
序列化第一个对象并反序列化一个副本。
两者都符合我的要求,问题是在速度(成本)方面我应该更好地使用哪个?
示例
class Person
{
public int ID { get; set; }
public string Firsthand { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
public decimal Weight { get; set; }
}
需要将属性值从Person p1 复制到Person p2。
对于这个简单的示例 - 哪种方法更快?
更新
对于序列化,我使用此处建议的 ObjectCopier:Deep cloning objects
我使用以下代码进行反射:
foreach (PropertyInfo sourcePropertyInfo in copyFromObject.GetType().GetProperties())
{
PropertyInfo destPropertyInfo = copyToObject.GetType().GetProperty(sourcePropertyInfo.Name);
destPropertyInfo.SetValue(
copyToObject,
sourcePropertyInfo.GetValue(copyFromObject, null),
null);
}
【问题讨论】:
-
autoMapper automapper.org 怎么样?还是只用 Clone() 完成这项工作?
-
为什么不能正常分配?
-
@Miau,这似乎是一个复杂的属性复制系统,感谢链接,非常有趣。但就我目前的需要而言,我要求它很简单,所以我认为 AutoMapper 将成为这种情况的典范。但我肯定会检查它并将其用于复杂的任务。
-
@DavidKemp,因为它必须是适用于任何提供的类的通用系统。
-
@net_prog 那么你想要深拷贝还是浅拷贝?
标签: c# serialization deserialization deep-copy shallow-copy