C# 中的对象更改
本文关键字:对象 | 更新日期: 2023-09-27 18:34:29
当我编写此代码时,我看到意外情况如何解决此问题?
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, "", "", "", "");
}
首先,我分配,
tempReferans = kRef;
当我将kref
分配给其他对象时,
KurumReferans kRefIstakip = new KurumReferans();
kRefIstakip = kRef;
kRefIstakip.Referans = "SORUMLU";
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);
}
}
编辑:您已使用属性标记该类[可序列化]
在行中:
kRefIstakip = kRef;
对象kRef
也被 kRefIstakip
引用。因为您正在kRef
实例分配给kRefIstakip
,而不是将kRef
复制到kRefIstakip
。
在引用类型对象中,代码:
obj1 = obj2;
不会将obj2
的值复制到obj1
,而是将obj2
引用复制到obj1
。然后两者都可以访问相同的内存位置。