0

当我编写这段代码时,我看到了一个意想不到的情况,我该如何解决这个问题?

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

4

2 回答 2

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);
 }
}

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

于 2013-10-09T12:16:33.450 回答
0

在行中:

kRefIstakip = kRef;

该对象kRef也被kRefIstakip. 因为您将kRef实例分配给kRefIstakip,而不是复制kRefkRefIstakip

引用类型对象中,代码:

obj1 = obj2;

不会复制obj2to的值obj1,但会复制obj2对 的引用obj1。然后两者都可以访问相同的内存位置。

于 2013-10-09T12:18:39.727 回答