我的代码List<student> list1
和List<student> list2
中有两个学生对象列表。
student对象具有以下属性。
FirstName
LastName
University
我有以下方法,我想使用LINQ比较两个列表中对象之间的相应属性的值。我在LINQ中找到了一些示例,它们展示了如何比较整数或字符串列表中的两个值,但找不到任何比较List中对象的属性值的示例。
`private CompareList(ref List<student> L1,ref List<student> L2)
{
// compare FirstName of L1 to L2
......
}`
我该怎么做呢? 谢谢!
答案 0 :(得分:3)
public static bool Compare(ref List<Student> list1, ref List<Student> list2)
{
return Enumerable.SequenceEqual(list1,list2, new MyCustomComparer());
}
public class MyCustomComparer : IEqualityComparer<Student>
{
public bool Equals(Student x, Student y)
{
if (x.FirstName == y.FirstName && x.LastName == y.LastName && x.University == y.University)
return true;
return false;
}
public int GetHashCode(Student obj)
{
throw new NotImplementedException();
}
}
答案 1 :(得分:1)
你没有说出你想要检查的内容,但如果你只是想知道两个收藏是否相等那么我想你可以这样检查:
bool isAnyElementFromL1NotInL2 = L1.Select(x => x.Name).Except(L2.Select(y => y.Name)).Any();
bool isAnyElementFromL2NotInL1 = L2.Select(x => x.Name).Except(L1.Select(y => y.Name)).Any();
bool areL1AndL2TheSame = !isAnyElementFromL1NotInL2 && !isAnyElementFromL2NotInL1;
答案 2 :(得分:1)
最好的方法是通过实施student
/ IComparable<student>
或IStructuralComparable
/ {来IEquatable<student>
(传统上Pascal类型)可比较{1}}或创建一个实现IStructuralEquatable
的比较器类。