列出所有职位的覆盖数据

我创建了一个包含3个字段的类:

class Gente { int _ID; string _nome, _sexo; public Gente() { _ID = 0; _nome = ""; _sexo = ""; } public int ID { set { _ID = value; } get { return _ID; } } public string Nome { set { _nome = value; } get { return _nome; } } public string Sexo { set { _sexo = value; } get { return _sexo; } } } 

然后我从该类声明了一个List,并从该类声明了一个对象,以便我能够添加到List中。

 List Alunos = new List(); Gente professor = new Gente(); 

我第一次做Alunos.Add(教授); 在列表中它正确地将信息发送到0位置。

但是当我第二次这样做的时候,除了将新数据添加到新位置之外,它还会用新数据覆盖位置0上的所有内容,1。

将两个对象添加到列表中的代码是什么样的? 我的猜测是:

 Gente professor = new Gente(); professor.Nome = "Fu"; Alunos.Add(professor); professor.Nome = "Bar"; Alunos.Add(professor); 

哪个不对。 将引用类型添加到列表时,您只是添加对原始对象的引用。 在这种情况下,您将两次引用同一对象。

因此,当您修改第二个对象时…您还要修改第一个对象。

一个简单的单行修复方法是在professor第二次使用之前重新初始化professor

 Gente professor = new Gente(); professor.Nome = "Fu"; Alunos.Add(professor); professor = new Gente(); professor.Nome = "Bar"; Alunos.Add(professor);