【发布时间】:2013-08-19 16:18:34
【问题描述】:
我有一个有两个泛型参数的类。我想将第二个泛型参数限制为与第一个不同的类型。有没有办法在编译时做出这样的限制?在运行时检查类型不是很有用。
public class Test<A, B>
where B : not_typeof(A)
{
// ...
}
【问题讨论】:
-
确实,这是一个稍微不同的场景,但最终它与@Sam 链接到的答案相同
-
您还有其他限制吗?因为当您拥有
where A : IUtensil、where B : IVehicle时,为什么还要关心用户是否拥有Test<Forklift, Forklift>?它应该可以工作...您能否添加更多详细信息? -
你不能写这样的约束,但当然你可以设置其他约束来保证类型不能相同,例如如果
A必须从类派生Animal和B必须派生自类Bicycle,如果这两个类都不是从另一个派生的,那么您将知道A和B不能是同一类型,例如@Kobi提示。同样,如果一个具有struct约束(不可为空的值类型),而另一个具有class约束(引用类型)。 -
感谢您的回答。不幸的是,我无法进一步限制参数。泛型类应该适用于任何给定的类型。我想要的唯一限制是
typeof(A) != typeof(B)。