Trying to implement a method that can compare any two lists but it always returns false
Posted
by
Tyler Pfaff
on Stack Overflow
See other posts from Stack Overflow
or by Tyler Pfaff
Published on 2013-11-09T21:32:04Z
Indexed on
2013/11/09
21:54 UTC
Read the original article
Hit count: 234
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; }
}
© Stack Overflow or respective owner