我刚刚在学习 OOP,但我在练习时遇到了问题。我有一个有学生的 SchoolClass。一个 SchoolClass 中的学生不允许有相同的编号。我有以下内容:
class SchoolClass
{
private List<Student> students;
public List<Student> Students
{
get { return this.students; }
set
{
if (value == null) throw new ArgumentNullException("Students list can not be null!");
if (value.Select(n => n.Number).Distinct().Count() != value.Count())
throw new ArgumentException("There are students in the list with the same class number!");
this.students = value;
}
}
public SchoolClass( List<Student> students)
{
this.Students = students;
}
}
class Student
{
private uint number;
public uint Number
{
get { return this.number; }
set
{
if (value == 0) throw new ArgumentException("Student's number can not be null!");
else this.number = value;
}
}
public Student(string name, uint number)
{
this.Number = number;
}
}
当我在 Main() 类中用相同的编号初始化两个学生时,我有一个 ArgumentException("列表中有学生具有相同的类号!"); 正如预期的那样。但是当我有一个 SchoolClass (sc) 的实例并调用它的学生列表并使用 Add() (sc.students.Add(new Student(..)) 我可以插入一个具有重复数字的学生。同样是List.InsertAt() 方法。我读到 getter 可以使用 ReadOnlyCollection<...>(...) 或 AsReadOnly() 以只读方式完成,但在这种情况下如何将新学生添加到列表中?
避免/解决此问题的最佳做法是什么?