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

C# 列表对象中的数据将被最新值替换。,c#,list,collections,C#,List,Collections,列表中新添加的数据将替换列表中以前的值。 在下面的代码段中,listRM中的所有项目都包含地址信息。我做错了什么 public void Assign(Rprts PrevItem, Rprts CurrentItem, List<Fields> listRM) { Fields field = new Fields(); field.hding = "Name :"; field.FName

列表中新添加的数据将替换
列表中以前的值。
在下面的代码段中,
listRM
中的所有项目都包含
地址
信息。我做错了什么

 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);

        }
公共无效分配(Rprts PrevItem、Rprts CurrentItem、List listRM)
{
字段字段=新字段();
field.hding=“名称:”;
field.FName=previitem.FName;
field.LName=previitem.LName;
field.addrs1=“”;
field.addrs2=“”;
field.City=“”;
listRM.Add(字段);
field.hding=“地址:”;
字段数量=”;
字段名称=”;
field.Dept=“”;
field.addrs1=“ABC”;
field.addrs2=“XYZ”;
field.City=“UVW”;
listRM.Add(字段);
}

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

第一次调用
listRM.Add(field)
时,将a传递给
字段
对象(它也只是一个引用)。更改此对象时,列表指向的对象也会更改

您可以在第二次调用
listRM.Add(field)
之前放置一个breakpont,并检查
field
listRM.Results
的值,例如,但不一定使用

现在要开始创建新项目,只需执行以下操作:

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

创建了一个实例:<代码>字段类,并将相同的对象添加到列表中,两次修改中间的对象。因此,正如预期的那样,您的列表将包含该对象两次,但两个列表项都将指向同一个已修改的实例

字段
。 尝试为要添加到列表中的每个项目创建全新的对象:
Fields字段=新字段()