Trying to implement a method that can compare any two lists but it always returns false
- by Tyler Pfaff
Hello like the title says I'm trying to make a method that can compare any two lists for equality. I'm trying to compare them in a way that validates that every element of one list has the same value as every element of another list. My Equals method below always returns false, can anyone see why that is? Thank you!
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));
}
}
Here is my data I'm using to test this Equals method.
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();
}
}
Car class
class Car
{
public String make { get; set; }
public String model { get; set; }
}