gpt4 book ai didi

c# - IDictionary`2 不能从 IDictionary 分配?

转载 作者:太空宇宙 更新时间:2023-11-03 18:36:38 24 4
gpt4 key购买 nike

我的 ViewModel 上有一处特性那是类型 IDictionary<string, string> .我正在查看 ViewModel 上的属性列表并使用反射来确定它是否是字典。

目前我有:

if (typeof(IDictionary).IsAssignableFrom(propDescriptor.PropertyType))

但是,这总是错误的,因为 propDescriptor.PropertyTypeIDictionary`2 .有什么想法可以让它发挥作用吗?另外,为什么那不起作用?


我只是将我的属性更改为 IDictionary 而不是 IDictionary。

编辑:不确定我的泛型去了哪里,但上面句子中的第二个 IDictionary 有字符串,字符串。

最佳答案

它不起作用的原因是通用 IDictionary<,> interface没有非通用 IDictionary作为基础接口(interface)。

也许这就是你想要的:

var type = propDescriptor.PropertyType;
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(IDictionary<,>))
{ // ...

编辑: 上面的代码只会检查是否 type声明IDictionary<X, Y>对于一些 XY .如果您还想处理 type 的情况表示实现 IDictionary<X, Y> 的类或结构(甚至是从 IDictionary<X, Y> 派生的接口(interface)),然后试试这个:

Func<Type, bool> isGenericIDict =
t => t.IsGenericType && t.GetGenericTypeDefinition() == typeof(IDictionary<,>);
var type = propDescriptor.PropertyType;
if (isGenericIDict(type) || type.GetInterfaces().Any(isGenericIDict))
{ // ..

关于c# - IDictionary`2 不能从 IDictionary 分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14380623/

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