首页 > 解决方案 > 添加新对象时列出覆盖以前添加的对象

问题描述

我正在为我正在制作的程序循环一些逻辑,该程序通过 .txt 文件读取文本,每次我到达算法添加我创建的类对象的地方时,它都可以工作,但是下次它遇到它时前一个对象将其数据更改为当前正在添加的对象,依此类推。

这是前言的代码片段,它位于 While 循环内,嵌套在 3 个 if 语句中。

问题:为什么它会覆盖所有其他条目?

我的逻辑是 100% 工作我在它上面运行了超过 10 个小时的测试,有很多断点也请放轻松我对 C# 半精通

    if (Att == a1)
    {
        Student s1 = new Student();
        s1.Eid = Eid;
        s1.Name = Name;
        s1.Attempt1 = att1;
        AllStudents.Add(s1);
        //AllStudents.Add(new Student(Eid,Name, att1));

        Eid = line;
        Att = "";
        qnum = 1;
        counter = 1;
    }

这是我的学生课

public class Student
    {
        public string Eid { get; set; }
        public string Name { get; set; }
        public string[] Attempt1 { get; set; }
        public string[] Attempt2 { get; set; }
        public string[] Attempt3 { get; set; }
        public string[] Att1filler = { "n/a", "n/a", "n/a", "n/a", "n/a", "n/a" };
        public string[] Att2filler = {"n/a","n/a","n/a","n/a","n/a","n/a"};
        public string[] Att3filler = {"n/a","n/a","n/a","n/a","n/a","n/a"};

        public int FinalGrade { get; set; }
        public int Grade1 { get; set; }
        public int Grade2 { get; set; }
        public int Grade3 { get; set; }
        public int Grade4 { get; set; }

        public Student()
        {
            FinalGrade = 0;
            Attempt1 = Att1filler;
            Attempt2 = Att2filler;
            Attempt3 = Att3filler;
        }
        public Student(string Eagid, string name, string[] Att1)
        {
            Eid = Eagid;
            Name = name;
            Attempt1 = Att1;
            Attempt2 = Att2filler;
            Attempt3 = Att3filler;
            FinalGrade = 0;
        }
        public Student(string Eagid, string name, string[] Att1, string[] Att2)
        {
            Eid = Eagid;
            Name = name;
            Attempt1 = Att1;
            Attempt2 = Att2;
            Attempt3 = Att3filler;
            FinalGrade = 0;
        }
        public Student(string Eagid, string name, string[] Att1, string[] Att2, string[] Att3)
        {
            Eid = Eagid;
            Name = name;
            Attempt1 = Att1;
            Attempt2 = Att2;
            Attempt3 = Att3;
            FinalGrade = 0;
        }
}

最后这就是我宣布我的名单的方式

 public List<Student> AllStudents = new List<Student>();

这也是AllStudents.add(new Student(Eid,Name, att1));我发现的另一个解决方案,它仍然对我不起作用。

标签: c#list

解决方案


我想到了。吸取了我关于通过引用传递与通过值传递的教训。确保您的算法是否正在循环,任何由 new 初始化并在循环内使用的东西都会在循环内重新初始化,这样您就不会只为每个对象传递相同的引用。(对不起,如果这个答案不是 100 % 我为了完成这个项目而睡了 2 个小时!)


推荐阅读