gpt4 book ai didi

c# - 将引用类型从一个C#复制到另一个C#

转载 作者:太空宇宙 更新时间:2023-11-03 17:39:10 24 4
gpt4 key购买 nike

下面是我的课

 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);
}
}

关于c# - 将引用类型从一个C#复制到另一个C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37749259/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com