列表替换所有以前的元素

Lai*_*zor 1 c# class list

我有一个Person类型列表.当我创建人员列表时,它会将当前列表元素的信息替换为当前列表元素的信息.我已经读过这是静态类变量的问题,但我的属性都不是静态的.

class Person{
private string _name;
private string _address;

public string Name{
get{ return _name;}
set { _name = value;}

public string Address{
get{ return _address;}
set { _address = value;}
}
}
Run Code Online (Sandbox Code Playgroud)

我从文件中读取人员并将其存储在字符串数组中.我介入以确保阵列是正确的.它是.

这是奇怪的地方:

string[] personArray;
Person tempPerson = new Person(); 
List<Person> people = new List<Person>();
foreach (string line in lines)//lines are the people from file, it is correct
{
personArray = line.Split(',');
if (personArray.Length == 2)
{
tempPerson.Name = personArray[0];
tempPerson.Address = personArray[1];
people.Add(tempPerson);
}
}
Run Code Online (Sandbox Code Playgroud)

我逐步完成代码,第一个人被正确添加,第二个人被添加到人物中,他们都有第二个人的信息.在add语句之后,一切都正常.

che*_*dep 5

你需要移动初始化

Person tempPerson = new Person();
Run Code Online (Sandbox Code Playgroud)

进入循环

        string[] personArray;

        List<Person> people = new List<Person>();
        foreach (string line in lines)//lines are the people from file, it is correct
        {
          personArray = line.Split(',');
          if (personArray.Length == 2)
          {
           Person tempPerson = new Person();
           tempPerson.Name = personArray[0];
           tempPerson.Address = personArray[1];
           people.Add(tempPerson);
          }
        }
Run Code Online (Sandbox Code Playgroud)

否则,您将更改同一对象的属性.

  • @Lainezor - 在C++中如果你有一个`vector <Person>`那么`people.push_back(tempPerson)`会将`tempPerson`对象复制到向量中.在C#中,`people.Add(tempPerson)`将一个**引用**添加到列表中的`tempPerson`.这意味着您的列表包含对单个"Person"对象的相同引用的多个副本.您正在通过`tempPerson`引用来改变此对象,因此更改将显示在所有列表元素中. (3认同)