2017-02-10 36 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

相關問題