新添加的数据列表会替换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);
}
答案 0 :(得分:1)
您必须为要添加的每个条目创建一个新的Field
实例。
第一次拨打listRM.Add(field)
时,您会将reference传递给field
对象(这也只是一个参考)。当您更改此对象时,列表指向的对象也会更改。
你可以通过在第二次调用listRM.Add(field)
之前放置一个breakpont来检查这一点,并检查field
和listRM.Results
的值,例如但不一定使用{{3 }}
现在开始创建一个新项目,只需执行:
field = new Field();
field. // set properties again
listRM.Add(field);
答案 1 :(得分:1)
您已经创建了一个Fields
类的实例,并将同一个对象添加到列表中两次,在中间修改该对象。因此,您的列表将按预期包含该对象两次,但两个列表项都将指向相同的已修改实例field
。
尝试为要添加到列表中的每个项目创建全新对象:
Fields field = new Fields();