2011-07-21 197 views
2

可以說我有以下的解釋:檢查指定類型是否匹配泛型類型?

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。

有人可以概述如何修改我的代碼,使此方法適用於泛型類型?

謝謝, Alex。

回答

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

對我而言是正確的。

如果您希望它也可以爲例如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))); 
}