gpt4 book ai didi

c# - 如何比较 IsGenericType 定义为 def 的相同类型

转载 作者:行者123 更新时间:2023-11-30 15:36:07 25 4
gpt4 key购买 nike

我有一个问题,我想确定一个对象是否属于 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);
...
}

这是错误的 IsGenericTypeDefinition对他们来说是不同的。

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

提前致谢!

最佳答案

item.GetType() == typeof(KeyValuePair<,>)

上面的方法永远行不通:不可能生成 KeyValuePair<,> 类型的对象.

原因是typeof(KeyValuePair<,>)不代表一个类型。相反,它是一个通用类型定义 - System.Type对象用于检查其他泛型类型的结构,但它们本身并不表示有效的 .NET 类型。

如果 item比如说,一个 KeyValuePair<string,int> , 然后 item.GetGenericTypeDefintion() == typeof(KeyValuePair<,>)

以下是修改代码的方法:

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

关于c# - 如何比较 IsGenericType 定义为 def 的相同类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14071379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com