列出所有位置的覆盖数据

elv*_*spt 6 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; }
        }
    }
Run Code Online (Sandbox Code Playgroud)

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

List<Gente> Alunos = new List<Gente>();        

        Gente professor = new Gente();
Run Code Online (Sandbox Code Playgroud)

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

但是当我第二次使用新数据覆盖位置0上的所有内容时,除了将新数据添加到新位置之外,1.

Jus*_*ner 13

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

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

professor.Nome = "Bar";
Alunos.Add(professor);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

professor = new Gente();
professor.Nome = "Bar";
Alunos.Add(professor);
Run Code Online (Sandbox Code Playgroud)

  • 您应该在第4行添加插入`professor = new Gente();`来解决问题. (3认同)