2017-09-03 132 views
1

我有一个具有许多属性的对象,我需要在每次迭代中创建该对象的副本,以便将所有属性复制到具有最后设置值的新出生对象中。 (我不能全部复制所有的属性和它们的值,因为我的对象实际上是一个自定义的用户控件,它有很多属性,我不知道它们全都是!)C#通过值复制一个对象

+0

你有什么试过的?请显示对象。为什么不能一个一个地复制属性? –

+0

该对象实际上是我自己创建的用户控件。我不知道用户控件的所有属性! – MohsenCs

+0

@ReyanChougle,感谢您的评论,我无法实现自定义克隆功能,因为我的对象是一个用户控件并且有很多属性。 – MohsenCs

回答

2

有一种更简单的方法通过使用JSON序列化程序将对象克隆到另一个对象。这个技巧不需要对克隆类的接口进行修改或实现,只需要像JSON.NET这样的JSON序列化器。

public static T Clone<T>(T source) 
{ 
    var serialized = JsonConvert.SerializeObject(source); 
    return JsonConvert.DeserializeObject<T>(serialized); 
} 
+0

你将不得不安装Newtonsoft.Json –

1

您可以使用该扩展方法来复制所有对象字段,当您尝试复制字段和属性,是引用类型properties.There可以有一些错误。

public static T CopyObject<T>(this T obj) where T : new() 
     { 
      var type = obj.GetType(); 
      var props = type.GetProperties(); 
      var fields = type.GetFields(); 
      var copyObj = new T(); 
      foreach (var item in props) 
      { 
       item.SetValue(copyObj, item.GetValue(obj)); 
      } 
      foreach (var item in fields) 
      { 
       item.SetValue(copyObj, item.GetValue(obj)); 
      } 
      return copyObj; 
     } 

相关问题