2012-01-20 52 views
1

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

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

keyTypeValueType是种发现较早。但是,根据dictionaryType.GetInterfaces(),此类型不实现IDictionary<KeyType, ValueType>接口。为什么?它看起来喜欢它应该...

+1

请的工作,到一个小完整的代码片段。 –

+1

你正在做一个'typeof(IDictionary )'对象。这是一个接口类型。它不能实现自己。 – BoltClock

+0

@亨克:真的,为什么?这个问题更多的是理论上的问题,我想说的是,可运行的并不会提供太多的信息 – carlpett

回答

4

因为类型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)}); 
+0

现在你已经解释了它,这很有意义。谢谢 :) – carlpett

相关问题