2 つのリストが等しいかどうかを比較できるメソッドを作成しようとしています。あるリストのすべての要素が別のリストのすべての要素と同じ値であることを検証する方法でそれらを比較しようとしています。以下の私の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; }
}