【发布时间】:2018-03-11 11:45:12
【问题描述】:
我正在尝试理解嵌套类型,但即使在检查了几个站点之后我仍然不明白。我有一个在课堂上的列表。我看不到如何将新项目添加到列表中,因为当我尝试时,它会用我的新项目覆盖现有项目。谁能告诉我我做错了什么?
class Program
{
static void Main(string[] args)
{
Master master = new Master();
master.Username = "Barry";
Quiz quiz = new Quiz();
quiz.QuizID = "quiz ID";
master.quiz = quiz;
Answers answers = new Answers();
answers.Answer1 = "answer 1";
answers.Answer2 = "answer 2";
answers.Answer3 = "answer 3";
master.quiz.answers.Add(answers);
answers.Answer1 = "answer 11";
answers.Answer2 = "answer 22";
answers.Answer3 = "answer 33";
master.quiz.answers.Add(answers);
}
}
public class Answers
{
public string Answer1 { get; set; }
public string Answer2 { get; set; }
public string Answer3 { get; set; }
}
public class Quiz
{
public string QuizID { get; set; }
public List<Answers> answers = new List<Answers>();
}
public class Master
{
public string Username { get; set; }
public Quiz quiz { get; set; }
}
当我执行第二个 .Add 然后检查 master.quiz.answers 中的内容时,它显示了两个条目,但它们都是 11、22、33 值,就好像第二个 .Add 覆盖了列表中已经存在的数据.
谢谢。
【问题讨论】:
-
在循环中移动声明以在循环的每次传递中获取一个新对象,目前您正在为旧值分配新值并且正在发生覆盖,您需要在每个新答案上使用 new 关键字对象与他自己的答案 1,2 和 3,通过说答案 1 = 10,答案 1 = 60,您将用新值 (60) 覆盖旧值 (10)。
-
是的,因为您将 same 对象添加到集合中两次。尝试比较
master.quiz.answers[0] == master.quiz.answers[1],你会发现它会返回true,因为两个引用都指向同一个对象