检查指定的类型是否与泛型类型匹配?

时间:2011-07-21 23:06:10

标签: 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。

有人可以概述如何修改我的代码以使此方法适用于泛型类型吗?

谢谢, 亚历克斯。

1 个答案:

答案 0 :(得分:4)

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)));
}