C#中的对象更改

alt*_*gan 0 c# oop object

当我写这段代码时,我发现一个意想不到的情况如何才能解决这个问题?

KurumReferans tempReferans = new KurumReferans();
tempReferans = kRef; 

if (kurumDetaylari.IsTakipMekanizmasiKullaniyor == true)
{
    KurumReferans kRefIstakip = new KurumReferans();
    kRefIstakip = kRef;
    kRefIstakip.Referans = "SORUMLU";
    kRefIstakip.Yontem = "SORUMLU:";
    kRefIstakip.Tipi = Tipi.Zorunlu;
    kRefIstakip.Parent = kurum;
    PostAddEdit(db.KurumReferans, kRefIstakip, cmd, "", "", "", "");
}
Run Code Online (Sandbox Code Playgroud)

首先我分配,

tempReferans = kRef;
Run Code Online (Sandbox Code Playgroud)

当我分配kref给其他对象后,

KurumReferans kRefIstakip = new KurumReferans();
kRefIstakip = kRef;
kRefIstakip.Referans = "SORUMLU";
Run Code Online (Sandbox Code Playgroud)

tempReferans 对象的值会发生变化,但我想要旧的值.

Raj*_*ian 8

您的对象正在变化,因为当您分配对象时,它只是为其分配地址,并且两个变量都使用相同的内存空间或对象.要解决此问题,您必须制作对象的深层副本并进行分配.

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)

编辑:您已使用属性[Serializable]标记该类

  • 如果对象不可序列化会发生什么? (3认同)