c# - 如何为泛型类型制作 IEqualityComparer<Type>

标签 c# generics types iequalitycomparer

我想要一个 IEqualityComparer<Type>当且仅当两个泛型类型相同且忽略泛型参数时返回 true。所以comparer.Equals(typeof(List<A>), typeof(List<B>))应该返回 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();
    }
}

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

最佳答案

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

关于c# - 如何为泛型类型制作 IEqualityComparer<Type>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42166111/

相关文章:

c# - 如何在没有邮箱的情况下使用具有 Windows 身份验证和身份的 EWS 发送和保存电子邮件?

c# - 添加到方法组是否算作使用变量?

java - 有什么方法可以实现比较任何提供的参数的 compareTo 方法吗?

java - 这个 Java 泛型范例是做什么的,它叫什么?

mysql - 多个值存储在 MySQL 数据库的单个列中?

node.js - npm @types 包的类型 globalDevDependency 的等价物是什么?

c# - Razor 表单在页面上显示不需要的文本

typescript - 内部包含任何泛型的数组

c# - 使用 Type 变量转换对象

c# - 自定义 setter 但自动 getter