Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么我的反射字典类型没有实现IDictionary?_C#_Reflection - Fatal编程技术网

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()
?现在您已经解释过了,这非常有意义。谢谢:)很有道理,既然你已经解释过了。谢谢:)