当然可以改进 IEqualityComparer 的实现。
首先,需要了解 IEqualityComparer 的原始实现。在此基础上,可以尝试以下方法来改进:
具体改进如下:
public class ImprovedEqualityComparer<T> : IEqualityComparer<T>
where T : class
{
private readonly Func<T, T, bool> _equalsFunc;
private readonly Func<T, int> _hashCodeFunc;
public ImprovedEqualityComparer(Func<T, T, bool> equalsFunc, Func<T, int> hashCodeFunc)
{
_equalsFunc = equalsFunc;
_hashCodeFunc = hashCodeFunc;
}
public bool Equals(T x, T y)
{
return _equalsFunc(x, y);
}
public int GetHashCode(T obj)
{
return _hashCodeFunc(obj);
}
}
使用上述改进后的 EqualityComparer,代码将具有以下优点:
需要注意的是,上述改进已经在 C# 7.2 及更高版本中进行了推荐。在 C# 7.1 及更低版本中,创建泛型实例的类型约束可能会导致编译器错误。因此,在 C# 7.1 及更低版本中,建议使用显式实现 IEqualityComparer。
领取专属 10元无门槛券
手把手带您无忧上云