C#通过值复制一个对象
问题描述:
我有一个具有许多属性的对象,我需要在每次迭代中创建该对象的副本,以便将所有属性复制到具有最后设置值的新出生对象中。 (我不能全部复制所有的属性和它们的值,因为我的对象实际上是一个自定义的用户控件,它有很多属性,我不知道它们全都是!)C#通过值复制一个对象
答
有一种更简单的方法通过使用JSON序列化程序将对象克隆到另一个对象。这个技巧不需要对克隆类的接口进行修改或实现,只需要像JSON.NET这样的JSON序列化器。
public static T Clone<T>(T source)
{
var serialized = JsonConvert.SerializeObject(source);
return JsonConvert.DeserializeObject<T>(serialized);
}
+0
你将不得不安装Newtonsoft.Json –
答
您可以使用该扩展方法来复制所有对象字段,当您尝试复制字段和属性,是引用类型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;
}
你有什么试过的?请显示对象。为什么不能一个一个地复制属性? –
该对象实际上是我自己创建的用户控件。我不知道用户控件的所有属性! – MohsenCs
@ReyanChougle,感谢您的评论,我无法实现自定义克隆功能,因为我的对象是一个用户控件并且有很多属性。 – MohsenCs