繁体   English   中英

C#中的对象更改

[英]Object change in C#

编写此代码时,我遇到意外情况,该如何解决?

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

编辑:您已标记该类具有[Serializable]属性

在该行中:

kRefIstakip = kRef;

kRef还引用对象kRefIstakip 因为您是将kRef实例分配给kRefIstakip ,而不是将kRef复制到kRefIstakip

引用类型对象中,代码:

obj1 = obj2;

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM