我有一個類爲什麼我的動態IEqualityComparer不起作用?
public class Foo
{
public int ID { get; set; }
}
,我已經實現了一個LinqEqualityComparer以允許除extenion方法動態的IEqualityComparer測試。
public class LinqEqualityComparer<T> : IEqualityComparer<T>
{
protected Func<T, T, bool> Comparison { get; set; }
public LinqEqualityComparer(Func<T, T, bool> comparison)
{
Comparison = comparison;
}
public bool Equals(T x, T y)
{
return Comparison(x, y);
}
public int GetHashCode(T obj)
{
return obj.GetHashCode();
}
}
我已經創建了下面的代碼來測試它:
IEnumerable<Foo> settings = new Foo[]
{
new Foo{ID = 1},
new Foo{ID = 2}
};
IEnumerable<Foo> currentSettings = new Foo[]
{
new Foo{ID = 1},
new Foo{ID = 2},
new Foo{ID = 3}
};
IEqualityComparer<Foo> comparer = new LinqEqualityComparer<Foo>((x, y) => x.ID == y.ID);
IEnumerable<Foo> missing = currentSettings.Except(settings, comparer);
然而FOOS 1,2和3都存在於 '丟失' 的變量。
爲什麼LinqEqualityComparer不起作用?
注意,這應該有一個稍微不同的名稱;這裏的想法是從一個委託(或更通常的lambda)定義一個比較器。雖然這與LINQ有些相關,但並不需要。 LINQ以外的地方有很多需要比較器的地方,因此我會考慮給它一個不同的名稱。 – Servy