2013-03-14 64 views
0

將新添加的數據替換爲list<>中的以前的值。 在以下代碼段中,listRM中的所有項都包含Address信息。我究竟做錯了什麼?列表對象中的數據正在被最新值替換。

public void Assign(Rprts PrevItem, Rprts CurrentItem, List<Fields> listRM) 
     { 
      Fields field = new Fields(); 
      field.hding = "Name :"; 
      field.FName = PrevItem.fname; 
      field.LName = PrevItem.lname; 
      field.addrs1 = ""; 
      field.addrs2 = ""; 
      field.City = ""; 


      listRM.Add(field); 


      field.hding = "Address :"; 
      field.Qty = ""; 
      field.Name = ""; 
      field.Dept = ""; 
      field.addrs1 = "ABC"; 
      field.addrs2 = "XYZ"; 
      field.City = "UVW"; 
      listRM.Add(field); 

     } 

回答

1

您必須爲要添加的每個條目創建一個新的Field實例。

您第一次打電話給listRM.Add(field)時,您將reference傳遞給您的field對象(這也只是一個參考)。當你改變這個對象時,列表指向的對象也會改變。

您可以通過將一個breakpont第二次調用listRM.Add(field)前看到這一點,檢查這兩個field的和listRM.Results的值,例如但不一定使用QuickWatch

我們開始創建一個新的項目,只是做:

field = new Field(); 
field. // set properties again 
listRM.Add(field); 
1

您已經創建Fields類的一個實例,並添加了相同的對象添加到列表兩次修改中間的那個對象。因此,如您所期望的那樣,您的列表將包含該對象兩次,但是這兩個列表項都將指向相同的修改實例field。 嘗試爲您打算添加到列表中的每個項目創建全新對象: Fields field = new Fields();