2017-02-10 57 views
2

我想要一个IEqualityComparer<Type>返回true当且仅当两个泛型类型相同时忽略泛型参数。所以comparer.Equals(typeof(List<A>), typeof(List<B>))应该返回true如何为泛型类型生成IEqualityComparer <Type>

我被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(); 
    } 
} 

有一些假阳性病例(命名空间问题等)。我不知道还有什么要做。

回答

3

这是一个检查,考虑通用考虑。如果x或y为空,它会抛出一个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; 
} 
+1

谢谢。正是我在找什么。 – AbleArcher