Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#按值复制对象_C#_Copy_Clone_Return By Value - Fatal编程技术网

C#按值复制对象

C#按值复制对象,c#,copy,clone,return-by-value,C#,Copy,Clone,Return By Value,我有一个具有许多属性的对象,我需要在每次迭代中创建该对象的副本,以便所有属性都以其最后一个设置值复制到新生对象中。 (我无法逐个复制所有属性及其值,因为我的对象实际上是一个自定义用户控件,它有许多属性,我不知道所有属性!)您可以使用此扩展方法复制所有对象字段和属性。当您尝试复制引用类型的字段和属性时,可能会出现一些错误 public static T CopyObject<T>(this T obj) where T : new() { va

我有一个具有许多属性的对象,我需要在每次迭代中创建该对象的副本,以便所有属性都以其最后一个设置值复制到新生对象中。
(我无法逐个复制所有属性及其值,因为我的对象实际上是一个自定义用户控件,它有许多属性,我不知道所有属性!)

您可以使用此扩展方法复制所有对象字段和属性。当您尝试复制引用类型的字段和属性时,可能会出现一些错误

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;
        }
publicstatict CopyObject(这个T对象),其中T:new()
{
var type=obj.GetType();
var props=type.GetProperties();
var fields=type.GetFields();
var copyObj=newt();
foreach(道具中的var项目)
{
item.SetValue(copyObj,item.GetValue(obj));
}
foreach(字段中的变量项)
{
item.SetValue(copyObj,item.GetValue(obj));
}
返回copyObj;
}

您尝试过什么?请出示物品。为什么不能一个接一个地复制属性?对象实际上是我自己创建的用户控件。我不知道用户控件的所有属性@ReyanChougle,谢谢你的评论,我不能实现自定义克隆函数,因为我的对象是一个用户控件,并且有很多属性。