嵌套泛型<t1 <t2>&gt;

时间:2017-06-28 10:30:31

标签: c# generics

为什么写这样的东西是不可能的:

T1<T2> Method<T1, T2>(T1<T2> genericValue) { ... }

例如,我想编写一个扩展方法,它接受一个通用对象,包含一个通用的集合:

Container<CT<T>> ExtensionMethod<CT, T>(Container<CT<T>> value) { ... }

其中CT可以是Array,List或任何其他集合类型,T是任何类型。但编译器说&#34;类型参数T1没有类型参数&#34;。

有没有解决办法?

1 个答案:

答案 0 :(得分:7)

这是不可能的。您的通用必须编译 任何 T。因此,如果您对T进行任何假设而不是object,则必须使用where关键字添加约束。

这种约束系统不是很复杂。您无法添加约束,要求T成为只有一个泛型类型参数的类。所以使用当前的工具集你不想做什么。

您需要询问Microsoft 为什么他们没有实现它,但看起来他们认为没有足够的商业价值。

也许你可以提出一个问题如何来实现某些东西,而不是将其分解为泛型。看来你可能有XY Problem