我想知道是否有人知道如何在C#中表示部分开放的泛型类型,例如IDictionary<string,>
。
我尝试过:
typeof(IDictionary<string,>)
我明白:&#39; typeof&#39;中不允许部分打开的类型表达式编译错误。
typeof(IDictionary<,>).MakeGenericType(typeof(string))
我得到:ArgumentException(提供的泛型参数的数量并不等于泛型类型定义的arity。参数名称:instantiation)
为什么我要这样做:
我有很多场景我需要检查一个类是否实现了一个接口,但在某些情况下我知道一些泛型类型参数必须是特定的(即我想要一些实现字典的东西)字符串键,但我不关心值类型)。我意识到还有很多其他方法可以做到这一点(例如,通过向我的方法提供必要的通用参数类型数组)。但是在查看问题时,如果有一种方法可以指定部分打开/部分关闭的泛型类型,那么我很好奇。因此,这个问题。
答案 0 :(得分:1)
也许这样的事情可以解决你的问题:
class CustomDictionary<TValue> : Dictionary<string, TValue>
{
}
这应该有效:
typeof(CustomDictionary<>).MakeGenericType(typeof(string))