以下是我的课
public Class Test
{
int id {get;set;}
string name {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我正在创建此类的对象并分配值.
var obj = new Test();
obj.id = 1;
obj.name = "test";
var newobj = obj;
newobj.name ="NewTest";
Run Code Online (Sandbox Code Playgroud)
以下是输出
Console.WriteLine(obj.name); //NewTest
Console.WriteLine(newobj.name); //NewTest
Run Code Online (Sandbox Code Playgroud)
当我改变新obj中存在的属性的值时,为什么obj的值正在改变.我知道它的解决方案,我不知道为什么我找不到.如果我在newobj中更改了值,我不希望obj的值被更改.
您没有创建副本,只是将object(obj)的引用分配给另一个变量(newobj).访问其中任何一个都指向内存中的相同位置.
要创建对象的副本,您必须克隆它. 例如,请参阅/sf/answers/5502871/ /sf/answers/9057681/.
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);
}
}
Run Code Online (Sandbox Code Playgroud)