获取部分打开的泛型类型的类型表示

时间:2016-08-18 13:53:17

标签: c# generics reflection

我想知道是否有人知道如何在C#中表示部分开放的泛型类型,例如IDictionary<string,>

我尝试过:

typeof(IDictionary<string,>)

我明白:&#39; typeof&#39;中不允许部分打开的类型表达式编译错误。

typeof(IDictionary<,>).MakeGenericType(typeof(string))

我得到:ArgumentException(提供的泛型参数的数量并不等于泛型类型定义的arity。参数名称:instantiation)

为什么我要这样做:

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

1 个答案:

答案 0 :(得分:1)

也许这样的事情可以解决你的问题:

class CustomDictionary<TValue> : Dictionary<string, TValue>
{
}

这应该有效:

typeof(CustomDictionary<>).MakeGenericType(typeof(string))