使用List<>,Array还是别的什么?

时间:2014-10-02 12:54:17

标签: c#

我正在从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。 我需要在正确的方向上推动如何解决这个问题。

3 个答案:

答案 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。