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

Вот чек, учитывающий общий характер. Он бы выбросил NRE, если x или y были пустыми, хотя, если вы хотите, чтобы более надежная проверка также добавила нулевую проверку.

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

 Смежные вопросы

  • Нет связанных вопросов^_^