我正在尝试制作一种可以比较任何两个列表是否相等的方法。我试图以一种验证一个列表的每个元素与另一个列表的每个元素具有相同值的方式比较它们。我Equals
下面的方法总是返回false
,有人能看出这是为什么吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
public class IEnumerableComparer<T> : IEqualityComparer<IEnumerable<T>>
{
public bool Equals(IEnumerable<T> x, IEnumerable<T> y)
{
for(int i = 0; i<x.Count();i++){
if(!Object.Equals(x.ElementAt(i), y.ElementAt(i))){
return false;
}
}
return true;
}
public int GetHashCode(IEnumerable<T> obj)
{
if (obj == null)
return 0;
return unchecked(obj
.Select(e => e.GetHashCode())
.Aggregate(0, (a, b) => a + b));
}
}
这是我用来测试此Equals
方法的数据:
static void Main(string[] args)
{
Car car1 = new Car();
car1.make = "Toyota";
car1.model = "xB";
Car car2 = new Car();
car2.make = "Toyota";
car2.model = "xB";
List<Car> l1 = new List<Car>();
List<Car> l2 = new List<Car>();
l1.Add(car1);
l2.Add(car2);
IEnumerableComparer<Car> seq = new IEnumerableComparer<Car>();
bool b = seq.Equals(l1, l2);
Console.Write(b); //always says false
Console.Read();
}
}
车类:
class Car
{
public String make { get; set; }
public String model { get; set; }
}