2016-01-29 79 views
0

這裏對象列表是類與更新錯誤

public class CartManage 
{ 
    public int prodId { get; set; } 
    // public string prodId { get; set; } 
    public int qty { get; set; } 
    public string color { get; set; } 
    public string size { get; set; } 
    public string Name { get; set; } 
    public string ShortDescription { get; set; } 
    public string Specification { get; set; } 
    public double Price { get; set; } 

    public string skew { get; set; } 
    public string weight { get; set; } 
    public string maxqty { get; set; } 
    public string productimage { get; set; } 
    public string prd_vendor_id { get; set; } 
    public string prdDeliveryDays { get; set; } 
    public bool GiftingEnabled { get; set; } 
    public int GiftingId { get; set; } 
} 

我用這個在我的網站即名單< CartManage> prodList_temp管理購物車。現在,當一個人增加購物車中物品的數量時。我在列表中添加另一個對象(我曾經只是增加對象的數量,但由於我必須實現一些功能,我需要單獨的對象)。我通過在列表上執行linq查詢來完成此操作,並將結果添加到購物車。

var session_updating_data = prodList_temp.Where(p => p.skew == reqired_skew); 
prodList_temp.Add(session_updating_data.FirstOrDefault()); 

即時通訊的問題是,插入後,如果在任何副本中更改任何副本,更改將反映在所有副本中。例如,我有兩個數量的物品A,即購物車包含兩個物品,其中包含如上所示創建的物品a的詳細信息。現在,如果我更改任何一個對象的giftingEnabled屬性,它都會反映在兩者中。現在我通過創建一個新對象找到了解決此問題的方法。但我想知道爲什麼這種奇怪的現象正在發生以備將來參考。

+1

這是因爲這行prodList_temp.Where(p => p.skew == reqired_skew);實際上,它正在編輯您現有的列表項目並將相同的副本添加到您的列表中。更好的辦法是創建新的清單項目併爲其分配新的值。 – DSA

回答

1

var session_updating_data = prodList_temp.Where(p => p.skew == reqired_skew); prodList_temp.Add(session_updating_data.FirstOrDefault());

要傳遞到對象的引用到您的列表,所以在對象中的任何更改將處處體現。當你創建一個新的對象時,它是一個單獨的實例。