【发布时间】:2018-04-17 11:29:00
【问题描述】:
我想确定给定的Type 对象是否引用了通用字典。为此,我尝试了this answer 的解决方案。但令我惊讶的是,下面的测试代码打印出not a generic dictionary!
private void Test()
{
var dict = new Dictionary<string, string>();
var type = dict.GetType();
if (type.IsGenericType &&
typeof(IDictionary<,>).IsAssignableFrom(type.GetGenericTypeDefinition()))
Console.WriteLine("a generic dictionary");
else
Console.WriteLine("not a generic dictionary!");
}
怎么可能IDictionary`2 不能从Dictionary`2 分配,或者我有什么根本错误?
以防万一,我在 Visual Studio 2015 中使用 .NET 4.6 作为目标。
【问题讨论】:
-
询问开放泛型类型的可分配性是否有意义?它们甚至不存在...注意
typeof(IDictionary<string,string>).IsAssignableFrom(type)将返回true -
@MarcGravell 在我的真实代码类型中是通过反射确定的,所以它可以是任何东西。在这一点上,我只想知道它是否是用于选择适当 GUI 组件的通用字典。
Key和Value的具体类型将在稍后在该组件中确定和处理。 -
是的,你不能那样做;您可以检查
type实现了哪些接口,并且对于每个:查看接口类型是否为泛型类型,如果是:检查泛型类型定义是否为typeof(IDictionary<,>),但是:您可以'不要使用IsAssignableFrom,因为在此上下文中简单地没有定义可分配性
标签: c# generics reflection types