我有两个相同类型的对象,需要将属性值从一个对象复制到另一个对象。有两种选择:
使用反射,浏览第一个对象的属性并复制值。
序列化第一个对象并反序列化副本。
两者都适合我的要求,问题是在速度(成本)方面我应该更好地使用哪个?
例子
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);
}