我创建了一个包含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<Gente> Alunos = new List<Gente>();
Gente professor = new Gente();
我第一次做Alunos.Add(教授);在列表中它正确地将信息发送到0位置。
但是当我第二次这样做时,除了将新数据添加到新位置1之外,它还会用新数据覆盖位置0上的所有内容。
答案 0 :(得分:13)
将两个对象添加到列表中的代码是什么样的?我的猜测是:
Gente professor = new Gente();
professor.Nome = "Fu";
Alunos.Add(professor);
professor.Nome = "Bar";
Alunos.Add(professor);
哪个不对。将引用类型添加到列表时,只是添加对原始对象的引用。在这种情况下,您将两次引用同一对象两次。
因此,当你修改第二个对象时...你也在修改第一个对象。
一个简单的单线修复方法是在第二次使用之前重新初始化professor
:
Gente professor = new Gente();
professor.Nome = "Fu";
Alunos.Add(professor);
professor = new Gente();
professor.Nome = "Bar";
Alunos.Add(professor);