C#如何创建学生和成绩的通用列表并访问这些列表

时间:2014-10-10 15:09:18

标签: c# generics

我正在努力解决C#应该非常简单的事情。我需要一个临时存储系统,用于未知数量的学生和每个学生的未知数量的属性。

我基本上收到了数目不详的学生,然后对每个学生进行查询,以返回他们的成绩和其他可能与其他学生不同的信息。

  • 学生1: 姓名:约翰 姓:Doe 数学1010:A 数学2020:B 数学3010:B + Eng 1010:A -

  • 学生2: 姓名:四月 姓氏:约翰逊 地质1000:C 数学1010:B 等...

然后在最后,我只需要逐步浏览每个学生并输出他们的信息。

我发现这个例子对每个学生的一组已知项目有好处,但我想我需要一个每个学生的列表,我不知道如何制作“主”列表。我可以想出数组,但是工作泛型对我来说是新的。

List<Student> lstStudents = new List<Student>();

Student objStudent = new Student();
objStudent.Name = "Rajat";
objStudent.RollNo = 1;

lstStudents.Add(objStudent);

objStudent = new Student();
objStudent.Name = "Sam";
objStudent.RollNo = 2;

lstStudents.Add(objStudent);

//Looping through the list of students
foreach (Student currentSt in lstStudents)
{
    //no need to type cast since compiler already knows that everything inside 
    //this list is a Student
    Console.WriteLine("Roll # " + currentSt.RollNo + " " + currentSt.Name);
}

2 个答案:

答案 0 :(得分:0)

你的学生需要一个领域

class Student
{
    public Dictionary<string, object> Attributes = new Dictionary<string, object>();
}

通过它,您可以存储未知数量的属性。

然后循环

foreach(var student in studentsList)
{
    Console.WriteLine("attr: " + student.Attributes["attr"]);
}

当然,您也可以与固定属性混合使用。 对于良好的编码,您应该使用属性和帮助程序成员函数来实现。我的例子非常基本。

答案 1 :(得分:0)

您可以声明学生班级:

    public class Student
    {
        private readonly Dictionary<string, object> _customProperties = new Dictionary<string, object>();

        public Dictionary<string, object> CustomProperties { get { return _customProperties; } }
    }

然后使用它:

        List<Student> lstStudents = new List<Student>();

        Student objStudent = new Student();
        objStudent.CustomProperties.Add("Name", "Rajat");
        objStudent.CustomProperties.Add("RollNo", 1);

        lstStudents.Add(objStudent);

        objStudent = new Student();
        objStudent.CustomProperties.Add("Name", "Sam");
        objStudent.CustomProperties.Add("RollNo", 2);

        lstStudents.Add(objStudent);

        foreach (Student currentSt in lstStudents)
        {
            foreach (var prop in currentSt.CustomProperties)
            {
                Console.WriteLine(prop.Key+" " + prop.Value);
            }

        }