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对象的值发生了变化,但我想使用旧值。

C# 中的对象更改

你的对象正在改变,因为当你分配一个对象时,它只是给它分配地址,两个变量使用相同的内存空间或对象。要克服这个问题,您必须制作对象的深层副本并分配。

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。然后两者都可以访问相同的内存位置。