如何为通用类型创建IEqualityComparer <type>

时间:2017-02-10 18:17:16

标签: c# generics types iequalitycomparer

我希望IEqualityComparer<Type>当且仅当两个泛型类型忽略泛型参数时才返回true。因此comparer.Equals(typeof(List<A>), typeof(List<B>))应该返回true

我正在通过Name进行比较:

public class GenericTypeEqualityComparer : IEqualityComparer<Type>
{
    public bool Equals(Type x, Type y)
    {
        return x.Name == y.Name;
    }

    public int GetHashCode(Type obj)
    {
        return obj.Name.GetHashCode();
    }
}

有一些误报(名称空间问题等)。我不知道还能做什么。

1 个答案:

答案 0 :(得分:3)

这是一张将通用考虑在内的检查。如果x或y为null,它会抛出一个NRE,如果你想要一个更健壮的检查,也可以添加一个空检查。

public bool Equals(Type x, Type y)
{
    var a = x.IsGenericType ? x.GetGenericTypeDefinition() : x;
    var b = y.IsGenericType ? y.GetGenericTypeDefinition() : y;
    return a == b;
}