【发布时间】:2014-08-01 18:51:39
【问题描述】:
在我的项目中,我需要一些类似于学生 grade system 的功能,其中必须使用 generics。用户可以输入数据,或者我们可以从数据库中获取数据,但演示基本功能如下所示
class Student
{
private string _name;
private double _grade;
public string Name
{
get { return _name; }
set { _name = value; }
}
public double Grade
{
get { return _grade; }
set { _grade = value; }
}
public Student(string name, double grade)
{
this.Name = name;
this.Grade = grade;
}
}
class Students: List<Student>
{
public void Print()
{
Console.WriteLine("Student\t\tGrade");
Console.WriteLine("-------------------------------");
foreach (Student student in this)
{
if (student != null)
{
Console.WriteLine(student.Name + "\t\t" + student.Grade);
}
}
}
}
class Program
{
static void Main(string[] args)
{
Students students = new Students();
//add the student to the list
students.Add(new Student("Tom", 83));
students.Add(new Student("Joe", 86));
students.Add(new Student("Rudy", 85));
students.Add(new Student("Chris", 87));
students.Add(new Student("Keith", 85));
students.Add(new Student("Pepe", 75));
students.Add(new Student("Juan", 88.9));
students.Add(new Student("Pedro", 75));
students.Add(new Student("Pablo", 75));
students.Add(new Student("Jose", 79));
students.Add(new Student("Tommy", 88));
//implement our custom comparer for grades
//students.Sort(new StudentGradeComparer());
students.Print();
Console.ReadLine();
}
}
但后来添加了一些功能,比如我必须打印 A,B,C,F ,而不是像 88 或 76 这样的标记。下面会是这样的,
if (marks >= 80)
grade = 'A';
else if (marks >= 70)
grade = 'B';
else if (marks >= 60)
grade = 'C';
else if (marks >= 50)
grade = 'D';
else if (marks >= 40)
grade = 'E';
else
grade = 'U'; // unclassified
但在我可枚举和通用的列表中我遇到了困难,请帮助我解决这个问题。使用泛型我的第一段代码工作正常并打印 tom 88 joe 77 等,但我需要 Tom A joe B 和描述的公式第二段代码。所以我在这里的困难是合并这2段代码。谢谢。
【问题讨论】:
-
I am having difficulties好吧,描述一下困难。不要以为我们知道您的问题是什么。 -
为什么必须使用泛型?
-
您没有显示实际返回成绩的代码。请参阅How to create a Minimal, Complete, and Verifiable example。
-
@AndrewArnold 不,他没有。他的第二组代码没有在第一组的上下文中显示。问题可能就在那里,但很难说,因为它没有显示出来。
-
泛型应该如何适应这个?除了通用列表之外,我看不出这里应该是通用的什么