2017-09-03 133 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; 
     } 

相關問題