列表对象中的数据将被最新值替换。

时间:2013-03-14 00:02:33

标签: c# list collections

新添加的数据列表会替换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);

        }

2 个答案:

答案 0 :(得分:1)

您必须为要添加的每个条目创建一个新的Field实例。

第一次拨打listRM.Add(field)时,您会将reference传递给field对象(这也只是一个参考)。当您更改此对象时,列表指向的对象也会更改。

你可以通过在第二次调用listRM.Add(field)之前放置一个breakpont来检查这一点,并检查fieldlistRM.Results的值,例如但不一定使用{{3 }}

现在开始创建一个新项目,只需执行:

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

答案 1 :(得分:1)

您已经创建了一个Fields类的实例,并将同一个对象添加到列表中两次,在中间修改该对象。因此,您的列表将按预期包含该对象两次,但两个列表项都将指向相同的已修改实例field。 尝试为要添加到列表中的每个项目创建全新对象: Fields field = new Fields();