当我写这段代码时,我发现一个意想不到的情况如何才能解决这个问题?
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 对象的值会发生变化,但我想要旧的值.
您的对象正在变化,因为当您分配对象时,它只是为其分配地址,并且两个变量都使用相同的内存空间或对象.要解决此问题,您必须制作对象的深层副本并进行分配.
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]标记该类