簡體   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