我正在从Exercism.io做一些编程练习,需要一些关于如何开始小学部作业的输入。
作业是添加姓名和成绩,并以List<string>
的形式从成绩索引中接收姓名。
分配的第一个测试如下:
[Test]
public void New_school_has_an_empty_roster()
{
Assert.That(school.Roster, Has.Count.EqualTo(0));
}
[Test]
public void Adding_a_student_adds_them_to_the_roster_for_the_given_grade()
{
school.Add("Aimee", 2);
var expected = new List<string> { "Aimee" };
Assert.That(school.Roster[2], Is.EqualTo(expected));
}
我不是在寻找一个完整的解决方案,但我需要一些关于Roster应该是什么的建议。我的想法是,Roster会像这样列出一个List:
public List<string>[] Roster = new List<string>[];
这个问题是它没有通过第一次测试,因为我必须为数组分配一个长度,所以count永远不会为0。 我需要在正确的方向上推动如何解决这个问题。
答案 0 :(得分:2)
我不会使用列表数组,这会让人感到困惑。阅读面向对象编程(OOP)并查看类的用户。
我会有一个班级代表一个人(或在你的情况下是一个学生),如:
public class Student
{
public string Name {get; set;}
public string Grade {get; set; }
}
并将它们存储在一个简单的学生列表中
public List<Student> Roster;
另一种看待的方式是词典,
public Dictionary<string, string> Roster;
其中每个条目都是学生姓名和成绩:
Roster.Add("John Mclain", "A*");
您还可以查看枚举(枚举)来存储成绩,而不是使用字符串。
答案 1 :(得分:1)
如果成绩是您的索引,那么您应该使用Dictionary<int, List<string>>
结构。 int
是关键,在您的案例等级中,列表包含具有该等级的学生的姓名。
当您添加成绩和学生时,检查该词典是否具有该成绩的任何值,如果是,则获取值(类型为List<string>
)并将学生姓名添加到该列表中,否则创建新列表并添加学生姓名。
答案 2 :(得分:0)
您的列表初始化错误,这就是为什么您必须为阵列分配大小的错误。 这就是你如何制作一个清单:
public List<string> Roster = new List<string>();
但在这种情况下,更好的方法是创建一个类Student或使用Dictionary。