C# 为什么我的反射字典类型没有实现IDictionary?
我正在使用反射和递归进行一些通用对象比较。递归方法在每个步骤中都需要一些类型信息,这些信息由调用方提供。有一次我知道下一个属性是C# 为什么我的反射字典类型没有实现IDictionary?,c#,reflection,C#,Reflection,我正在使用反射和递归进行一些通用对象比较。递归方法在每个步骤中都需要一些类型信息,这些信息由调用方提供。有一次我知道下一个属性是字典,我想发送正确的类型。我想到了这个: Type dictionaryType = typeof (IDictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)}); Type dictionaryType=typeof(IDictionary).MakeG
字典
,我想发送正确的类型。我想到了这个:
Type dictionaryType = typeof (IDictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)});
Type dictionaryType=typeof(IDictionary).MakeGenericType(新[]{keyType.PropertyType,typeof(ValueType)});
其中,
keyType
和ValueType
是前面找到的类型。但是,根据dictionaryType.GetInterfaces()
,此类型不实现IDictionary
接口。为什么?它看起来应该…,因为类型是IDictionary
。GetInterfaces
方法只承诺返回一个类型对象数组,该数组表示当前类型实现或继承的所有接口。由于IDictionary
没有(实际上也不能)实现自身,因此返回值合法地是它继承的所有接口
使用Dictionary
作为实现IDictionary
的任意类,以下内容更合适:
Type dictionaryType = typeof (Dictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)});
Type dictionaryType=typeof(Dictionary).MakeGenericType(new[]{keyType.PropertyType,typeof(ValueType)});
因为类型是IDictionary
。GetInterfaces
方法只承诺返回一个类型对象数组,该数组表示当前类型实现或继承的所有接口。由于IDictionary
没有(实际上也不能)实现自身,因此返回值合法地是它继承的所有接口
使用Dictionary
作为实现IDictionary
的任意类,以下内容更合适:
Type dictionaryType = typeof (Dictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)});
Type dictionaryType=typeof(Dictionary).MakeGenericType(new[]{keyType.PropertyType,typeof(ValueType)});
请将其转换成一个完整的小代码段。您正在制作一个typeof(IDictionary)
对象。这是一种接口类型。它不能自己实现。@Henk:真的,为什么?我认为,这个问题更像是一个理论问题,而可运行不会提供太多信息,因为对于这类问题,它通常与dictionaryType.GetInterfaces()的使用方式有关。但它看起来很丰富。o有你的答案,但这里不是这样。反射和泛型在这里是不相关的。此表达式返回什么,例如:typeof(IConvertible).GetInterfaces().Count()
?请将其转换为一个完整的小代码段。您正在创建一个typeof(IDictionary)
对象。这是一种接口类型。它不能自己实现。@Henk:真的,为什么?我认为,这个问题更像是一个理论问题,而可运行不会提供太多信息,因为对于这类问题,它通常与dictionaryType.GetInterfaces()的使用方式有关。但它看起来很丰富。o有你的答案,但这里不是这样。反射和泛型在这里是不相关的。这个表达式返回什么,例如:typeof(IConvertible).GetInterfaces().Count()
?现在您已经解释过了,这非常有意义。谢谢:)很有道理,既然你已经解释过了。谢谢:)