我希望只有classStudents
尚未出现在列表中时才会_ClassStudents
添加classStudents
。
public class ClassStudents{
public Id {get; set;}
public Name {get; set;}
public List<Student> Student {get; set;}
}
public static List<ClassStudents> _ClassStudentsList = new List<ClassStudents>();
public static void addClassStudents(ClassStudents classStudents)
{
//if( classStudents isn't in ClassStudentsList ) <------
_ClassStudentsList.Add(classStudents);
}
我该怎么做?
答案 0 :(得分:6)
您可以使用Laravel 5.1 pagination count扩展名方法:
var text = nameClassStudents.Text;
if(!_ClassStudentsList.Any(t => t.Text == text))
{
_ClassStudentsList.Add(new ClassStudents(text,(int)numericUpDown1.Value));
}
但是,这并不能保证名称在列表中是唯一的。
如果您希望保证,只需使用Any
代替List<ClassStudents>
字典不允许重复键
当然,在这里你还需要在向字典添加值之前检查密钥是否存在:
var dict = new Dictionary<string, int>;
...
var text = nameClassStudents.Text;
if(!dict.ContainsKey(text))
(
dict.Add(text, (int)numericUpDown1.Value);
)
答案 1 :(得分:3)
您还可以使用HashSet:
public class ClassStudents {
public Id {get; set;}
public Name {get; set;}
public override bool Equals(object obj) {
return this.Name.Trim().ToLower().Equals(((ClassStudents)obj).Name.Trim().ToLower());
}
public override int GetHashCode() {
return this.Name.GetHashCode();
}
}
在main()中,您可以声明一个HashSet,如下所示:
HashSet <ClassStudents> hash = new HashSet<ClassStudents>();
现在,这将仅在集合中添加唯一元素。
答案 2 :(得分:2)
我认为正确的方法是告诉你的程序两个Turma
类型相等的含义。
public class ClassStudents
{
public string Name { get; set; }
public int Value { get; set; }
// Override the equality operation to check for text value only
public override bool Equals(object obj)
{
if (obj is ClassStudents other) // use pattern matching
{
return Name.Equals(other.Name);
}
return false;
}
}
现在,您可以使用列表方法.Contains()
来检查项目是否存在。
{
List<ClassStudents> classStudents = new List<ClassStudents>();
public Test()
{
// Add three values
classStudents.Add(new ClassStudents() { Name="ABC", Value=101 });
classStudents.Add(new ClassStudents() { Name="IJK", Value=111 });
classStudents.Add(new ClassStudents() { Name="XYZ", Value=101 });
// Check if exists before adding this value
ClassStudents x = new ClassStudents() { Name="ABC", Value=121 };
// `Contains()` calls the `Equals()` method of `classStudents`
if (!classStudents.Contains(x))
{
classStudents.Add(x);
}
}
}
这导致了最干净的代码,因为检查if(!classStudents.Contains(x))
的作用很明显。此外,您还可以通过为类型添加智能来充分利用CLR的强大功能。 OOP就是在用户类中添加方法来定义操作。在这种情况下,我定义了此类型的相等意义,现在CLR可以在需要时使用此信息。