2017-02-10 7 views
2

2つのジェネリックタイプが同じジェネリックパラメータを無視している場合にのみ、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がnullの場合はNREを投げますが、より堅牢なチェックが必要な場合はnullチェックも追加します。

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

関連する問題