C# 如何比较IsGenericTypeDefinition为deff的相同类型

C# 如何比较IsGenericTypeDefinition为deff的相同类型,c#,keyvaluepair,C#,Keyvaluepair,我有一个问题,我想确定对象的类型是否为KeyValuePair 当我在if中比较时: else if (item.GetType() == typeof(KeyValuePair<,>)) { var key = item.GetType().GetProperty("Key"); var value = item.GetType().GetProperty("Value"); var keyObj = key.GetValue(item, null);

我有一个问题,我想确定对象的类型是否为
KeyValuePair

当我在if中比较时:

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);
    ...
}
else if(item.GetType()==typeof(KeyValuePair))
{
var key=item.GetType().GetProperty(“key”);
var value=item.GetType().GetProperty(“值”);
var keyObj=key.GetValue(项,空);
var valueObj=value.GetValue(项,空);
...
}
这是错误的,因为
IsGenericTypeDefinition
与它们不同

有人能解释一下为什么会发生这种情况,以及如何以正确的方式解决这个问题(我的意思是不要比较名称或其他琐碎的字段)


提前谢谢

找到这段代码,试试看:

public bool IsKeyValuePair(object o) 
{
    Type type = o.GetType();

    if (type.IsGenericType)
    {
        return type.GetGenericTypeDefinition() != null ? type.GetGenericTypeDefinition() == typeof(KeyValuePair<,>) : false;
    }

    return false;
}
public bool IsKeyValuePair(对象o)
{
Type Type=o.GetType();
if(type.IsGenericType)
{
返回类型.GetGenericTypeDefinition()!=null?类型.GetGenericTypeDefinition()==typeof(KeyValuePair):false;
}
返回false;
}
资料来源:


你好,鲁伊,我不需要这个,因为我知道类型是相同的。问题是我无法比较它们,因为其中一个是typeof(KeyValuePair)。IsGenericTypeDefinition=true,另一个是item.GetType().IsGenericTypeDefinition。但是类型是一样的!THX它可以工作,所以我的错误是我试图将泛型类型与非泛型类型进行比较,对吗?@SairuS您试图将泛型类型与泛型类型定义进行比较。我知道,这确实令人困惑:当我开始使用.NET reflection时,我花了几周时间才习惯这种区别。
item.GetType() == typeof(KeyValuePair<,>)
...
else if (item.IsGenericType() && item.GetGenericTypeDefintion() == typeof(KeyValuePair<,>)) {
    ...
}