假设我有以下字典:
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/