列出所有位置的覆盖数据

时间:2010-04-30 12:33:33

标签: c# list

我创建了一个包含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上的所有内容。

1 个答案:

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