Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使iQualityComparer<;类型>;对于泛型类型_C#_Generics_Types_Iequalitycomparer - Fatal编程技术网

C# 如何使iQualityComparer<;类型>;对于泛型类型

C# 如何使iQualityComparer<;类型>;对于泛型类型,c#,generics,types,iequalitycomparer,C#,Generics,Types,Iequalitycomparer,我需要一个IEqualityComparer,当且仅当两个泛型类型相同时才返回true,忽略泛型参数。所以comparer.Equals(typeof(List),typeof(List))应该返回true 我正在通过Name进行比较: public class GenericTypeEqualityComparer : IEqualityComparer<Type> { public bool Equals(Type x, Type y) { ret

我需要一个
IEqualityComparer
,当且仅当两个泛型类型相同时才返回true,忽略泛型参数。所以
comparer.Equals(typeof(List),typeof(List))
应该返回
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();
    }
}
公共类GenericTypeEqualityComparer:IEqualityComparer
{
公共布尔等于(x型,y型)
{
返回x.Name==y.Name;
}
public int GetHashCode(类型obj)
{
返回obj.Name.GetHashCode();
}
}

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

这是一个考虑到通用性的检查。如果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;
}

谢谢正是我想要的。