2013-03-14 58 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();