C# 获取部分打开泛型类型的类型表示形式

C# 获取部分打开泛型类型的类型表示形式,c#,generics,reflection,C#,Generics,Reflection,我想知道是否有人知道一种在C#中获得部分打开泛型类型表示的方法,例如IDictionary 我所尝试的: typeof(IDictionary<string,>) typeof(IDictionary) 我得到:在“typeof”表达式编译错误中不允许部分打开类型 typeof(IDictionary<,>).MakeGenericType(typeof(string)) typeof(IDictionary).MakeGenericType(typeof(stri

我想知道是否有人知道一种在C#中获得部分打开泛型类型表示的方法,例如
IDictionary

我所尝试的:

typeof(IDictionary<string,>)
typeof(IDictionary)
我得到:在“typeof”表达式编译错误中不允许部分打开类型

typeof(IDictionary<,>).MakeGenericType(typeof(string))
typeof(IDictionary).MakeGenericType(typeof(string))
I get:ArgumentException(提供的泛型参数数量不等于泛型类型定义的arity。参数名称:实例化)

我为什么要这样做:


我有很多场景需要检查我拥有的类是否实现了接口,但在一些情况下,我知道一些泛型类型参数必须是特定的(即,我想要实现带有字符串键的字典的东西,但我不关心值类型)。我意识到还有很多其他方法可以做到这一点(例如,通过为我的方法提供一个必需的泛型参数类型数组)。但是在研究这个问题时,我很好奇是否有一种方法可以指定部分打开/部分关闭的泛型类型,因此产生了这个问题。

也许类似的方法可以解决您的问题:

class CustomDictionary<TValue> : Dictionary<string, TValue>
{
}
class自定义字典:字典
{
}
这应该是可行的:

typeof(CustomDictionary<>).MakeGenericType(typeof(string))
typeof(自定义字典)。MakeGenericType(typeof(字符串))

您不能使用类似于
Dictionary
的东西作为一个选项,您可以创建DummyGenericArgument类并将其用作一个空的泛型参数。@AD.Net好吧,这就是我要问的-有没有办法获得表示Dictionary的类型对象,其中t是未知的?这不是我想要的,但实际上,这似乎是可能的。如果我定义了接口StringDict:IDictionary,那么StringDict的实现接口列表包括IDictionary,这就是想法。:)问题是我需要为我想要检查的每件事情实现一个(无用的)接口,也就是说,如果我想检查类Q是否实现了IDictionary,我需要一个IStringDicChecker:IDictionary,那么我需要通过typeof(IStringDicChecker)实现接口然后我需要找到一个通用版本是IDictionary的版本。这一切都是可行的,但我需要添加一个新接口来检查IDictionary,等等。我不明白为什么每种类型都需要一个接口,因为它是泛型的。如果
Q
实现了
IStringDict
,您肯定知道
Q
实现了
IDictionary
。因为您可以使
IStringDict:IDictionary
。您不必再检查
IDictionary
,而是检查
IStringDict
。对。但是如果我想检查IDictionary,我需要一个新的接口。或者,如果我想检查IMyCustomInterface中的IMyCustomInterface,我需要一个新接口。