2017-05-16 62 views
1

我在c#中有一个对象需要被复制多次和快速。复制对象的最快方法

目前我与

public static void CopyFieldsInto<T>(T from, T to,bool ommitNulls=false) where T : new() 
{ 
    foreach (var f in GetAllFieldsByType<T>()) 
    { 
      var v = f.GetValue(from); 
      if (ommitNulls&&v==null) 
      { 
       continue; 
      } 
      f.SetValue(to, v); 
    } 
} 

问题这样做是GetValueSetValue耗时太久,慢下来。

有没有更好的方法来做到这一点?

+1

你控制对象的源代码吗?你可以实现一个接口来帮助这个,然后你不需要使用反射。如果你必须能够为任意物体做到这一点,反射是你唯一的选择。 – xxbbcc

+0

我正在考虑这样做。但是,手动查看每个字段非常耗时,并且稍后可能会导致问题,当我添加其他字段并忘记在克隆方法中提及它们时 –

+3

看看http://stackoverflow.com/questions/5476575/具有更好性能的克隆 – HimBromBeere

回答

1

如果您需要使用反射来复制对象的属性,则无法避免使用GetValueSetValueHere是另一种类似于您的方法。也可能值得考虑使用AutoMapper或类似的工具。

+1

“无法避免使用GetValue和SetValue”?没有人强迫你这样做 - 你可以发出代码(源,IL或表达式树)来做到这一点很好 - http://stackoverflow.com/questions/321650/how-do-i-set-a-field-值在-AN-C锋利表达树 –