[英]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.