下面是我的课
public Class Test
{
int id {get;set;}
string name {get;set;}
}
我正在创建此类的对象并分配值。
var obj = new Test();
obj.id = 1;
obj.name = "test";
var newobj = obj;
newobj.name ="NewTest";
下面是输出
Console.WriteLine(obj.name); //NewTest
Console.WriteLine(newobj.name); //NewTest
当我更改新obj中存在的属性的值时,为什么obj的值正在更改。我知道它的解决方案,我不确定为什么找不到。如果我在newobj中更改了值,我不想更改obj的值。
您并不是在创建副本,而只是在将对象(obj
)的引用分配给另一个变量(newobj
)。访问它们中的任何一个都指向内存中的相同位置。
要创建对象的副本,您必须对其进行克隆。例如,请参阅https://stackoverflow.com/a/78612/1028323 https://stackoverflow.com/a/129395/1028323。
public static T DeepClone<T>(T obj)
{
using (var ms = new MemoryStream())
{
var formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
ms.Position = 0;
return (T) formatter.Deserialize(ms);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句