Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.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吗#_C#_Asp.net_Asp.net Mvc_Oop_Object - Fatal编程技术网

C# 要保留引用类型对象值c吗#

C# 要保留引用类型对象值c吗#,c#,asp.net,asp.net-mvc,oop,object,C#,Asp.net,Asp.net Mvc,Oop,Object,这是关于如何保留对象的值。 我有一个对象作为“objData”,它有我的主要结果。我将objData的结果存储在一个变量中 var result = objData; 在此之后,我将从objData中删除一些属性,如下所示 var result1 = objData.remove(x=>x.something..); 然后,如果我选中了“result”,那么它也会被更新,因为它是引用类型对象。如果我在创建“result1”的过程中删除了一些属性,有没有办法为“result”保留相同的值

这是关于如何保留对象的值。 我有一个对象作为“objData”,它有我的主要结果。我将objData的结果存储在一个变量中

var result = objData;
在此之后,我将从objData中删除一些属性,如下所示

var result1 = objData.remove(x=>x.something..);
然后,如果我选中了“result”,那么它也会被更新,因为它是引用类型对象。如果我在创建“result1”的过程中删除了一些属性,有没有办法为“result”保留相同的值

这不会复制
objData
的值,而只是创建对同一对象的第二个引用。因此,通过
result
objData
对对象所做的任何修改都会被双方“看到”

创建副本取决于对象的类型。有些对象实现了
克隆
方法1,有些对象实现了自己的方法,但大多数情况下,您必须创建一个新实例并复制所有状态:

var result = new TheType {
  Prop1 = source.Prop1,
  Prop2 = source.Prop2,
 …
};
当然,对于许多类型来说,这样的克隆毫无意义(例如,管理TCP套接字的对象)



1这是深层克隆—对象是递归克隆还是仅在顶层克隆—取决于类型。

objData是列表吗?@WillyDavidJr它是具有多个属性的对象!您能否重新定义
remove
方法以返回应用该方法的对象的副本?
remove
方法直接更新源,因此
result
在此也会受到影响。要保留
结果
,您需要编写具有不同引用位置的自定义复制方法(可能使用
新的
运算符)。@无损:但关于创建复制的工作代码(这是一个问题),无论将其放在何处,都是相同的。根据具体情况,任何一种选择都是有效的。如果每次调用remove方法都不需要副本(例如,复制一次,然后删除复制对象上的5个不同属性),则将其放入remove方法是不正确的。但是OP的问题也取决于如何首先进行复制,从这个问题可以看出,他试图分配给不同的变量,但没有说明引用类型是如何工作的。
var result = new TheType {
  Prop1 = source.Prop1,
  Prop2 = source.Prop2,
 …
};