将参考类型从一个复制到另一个C#

Max*_*ddy 1 c#

以下是我的课

 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的值被更改.

Ale*_*lex 5

您没有创建副本,只是将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)