我正在使用反射和递归进行一些通用对象比较。递归方法在每个步骤中都需要一些类型信息,这些信息由调用者提供。有一次我知道下一个属性是Dictionary<T,U>
,我想发送正确的类型。我想出了这个:
Type dictionaryType = typeof (IDictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)});
其中
keyType
和ValueType
是较早发现的类型。但是,根据IDictionary<KeyType, ValueType>
,此类型不实现dictionaryType.GetInterfaces()
接口。为什么?看起来应该... 最佳答案
因为类型为IS IDictionary<KeyType, ValueType>
。 GetInterfaces
方法仅承诺返回An array of Type objects representing all the interfaces implemented or inherited by the current Type
。由于IDictionary<>
不能(实际上不能)实现自身,因此返回值合法地是它继承的所有接口。
将Dictionary<,>
用作实现IDictionary<,>
的任意类,以下内容将更为合适:
Type dictionaryType = typeof (Dictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)});
关于c# - 为什么我的反射(reflect)字典类型不实现IDictionary?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8941476/