我正在使用反射和递归进行一些通用对象比较。递归方法在每个步骤中都需要一些类型信息,这些信息由调用者提供。有一次我知道下一个属性是Dictionary<T,U>,我想发送正确的类型。我想出了这个:

Type dictionaryType = typeof (IDictionary<,>).MakeGenericType(new [] {keyType.PropertyType, typeof(ValueType)});


其中keyTypeValueType是较早发现的类型。但是,根据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/

10-08 20:33