其他分享
首页 > 其他分享> > CodeGo.net>如何cmpare IsGenericTypeDefinition是Deff相同的类型

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&gt ;,则item.GetGenericTypeDefintion()== typeof(KeyValuePair<,>)

这是修改代码的方法:

...
else if (item.IsGenericType() && item.GetGenericTypeDefintion() == typeof(KeyValuePair<,>)) {
    ...
}

标签:keyvaluepair,c
来源: https://codeday.me/bug/20191031/1975906.html