【问题标题】:List overwriting data on all positions [duplicate]列出所有位置上的覆盖数据[重复]
【发布时间】:2010-04-30 12:33:33
【问题描述】:

我创建了一个包含 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<Gente> Alunos = new List<Gente>();        

        Gente professor = new Gente();

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

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

【问题讨论】:

    标签: c# list


    【解决方案1】:

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

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

    【讨论】:

    • 您应该补充一点,在第 4 行插入 professor = new Gente(); 可以解决问题。
    • 好的,谢谢伙计。有效。 =)
    • 谢谢你拯救了五月天!!!!!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    • 2015-11-24
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-18
    • 2021-06-06
    相关资源
    最近更新 更多