c# - 检查指定类型是否匹配泛型类型?

标签 c# .net generics .net-4.0

假设我有以下字典:

protected Dictionary<Type, Type> MatchingTypes = new Dictionary<Type, Type>()
{
    { typeof(ObservableList<>), typeof(XmlDataModel.XmlObjectCollection<>) }
};

我有一个签名类似于这样的方法:

public CheckTypesMatch(Type one, Type two)
{
    return MatchingTypes.Any(kv => ((kv.Key == one && kv.Value == two) || (kv.Value == one && kv.Key == two)));
}

这对于非泛型类型会很好地工作,但是对于上面的泛型类型,此方法不会返回 true。

谁能概述一下我可以如何修改我的代码以使该方法适用于泛型类型?

谢谢, 亚历克斯。

最佳答案

CheckTypesMatch(typeof(ObservableList<>), typeof(XmlDataModel.XmlObjectCollection<>))

对我来说返回真。

如果您希望它也返回 true,例如typeof(ObervableList<int>)你可以像下面这样重写它:

public bool CheckTypesMatch(Type one, Type two)
{
    var one2 = one.IsGenericType ? one.GetGenericTypeDefinition() : one;
    var two2 = two.IsGenericType ? two.GetGenericTypeDefinition() : two;

    return MatchingTypes.Any(
        kv => ((kv.Key == one2 && kv.Value == two2) 
            || (kv.Value == one2 && kv.Key == two2)));
}

关于c# - 检查指定类型是否匹配泛型类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783901/

相关文章:

c# - 是具有递归的有效通用二叉搜索树

c# - 从已包含表的 View 中的文件夹下载文件

c# - 在多线程应用程序中使用 Thread.Sleep 的原因是什么?

.net - 如何在自定义 WPF 文本框中显示插入符号

c# - 为什么 Windows 7 无法从我使用 DotNetZip 创建的受密码保护的 zip 文件中提取文件?

arrays - 采用数组和字典的协议(protocol)

c# - 如何使用相同的通用方法来验证不同类型

c# - 如何获取实现 IMyInterface 的引用中的所有类型

c# - 使用 JavaScript 函数显示日历

java - 在 Java 中调用模糊重载的构造函数