CodeGo.net>如何cmpare IsGenericTypeDefinition是Deff相同的类型
作者:互联网
我有一个问题要确定对象是否为KeyValuePair<>类型.
当我比较以下情况时:
else if (item.GetType() == typeof(KeyValuePair<,>))
{
var key = item.GetType().GetProperty("Key");
var value = item.GetType().GetProperty("Value");
var keyObj = key.GetValue(item, null);
var valueObj = value.GetValue(item, null);
...
}
这是错误的,因为IsGenericTypeDefinition对他们来说是不同的.
有人可以解释我为什么会这样以及如何以正确的方式解决此问题(我的意思是不比较名称或其他琐碎的字段.)
提前THX!
解决方法:
item.GetType() == typeof(KeyValuePair<,>)
上面的方法永远不会起作用:不可能创建类型为KeyValuePair<,>的对象.
原因是typeof(KeyValuePair<,>)不代表类型.而是一个通用类型定义-一个System.Type对象,用于检查其他通用类型的结构,但它们本身并不表示有效的.NET类型.
例如,如果某项是KeyValuePair< string,int> ;,则item.GetGenericTypeDefintion()== typeof(KeyValuePair<,>)
这是修改代码的方法:
...
else if (item.IsGenericType() && item.GetGenericTypeDefintion() == typeof(KeyValuePair<,>)) {
...
}
标签:keyvaluepair,c 来源: https://codeday.me/bug/20191031/1975906.html