我想知道C#.NET中是否存在任何类型约束,表明一个类型参数不等于另一个类型参数;像这样......
public class FooBar<TA,TB> where TA notequalto TB
我想这样做的原因是我可以按照以下内容创建2个附加运算符...
public class FooBar<TA,TB> where TA notequalto TB
{
public static TA operator +(TB b, FooBar<TA,TB> fooBar)
{
return fooBar.Foo(b);
}
public static TB operator +(TA a, FooBar<TA,TB> fooBar)
{
return fooBar.Bar(a);
}
public TA Foo(TB b) { ... }
public TB Bar(TA a) { ... }
}
我面临的问题是,如果TA = TB,就应该调用哪个运算符而言是不明确的,因此应该调用Foo()或Bar()!虽然这不是必需的,但我希望能够在可能的情况下实现这一点......
答案 0 :(得分:2)
不,C#中没有这样的限制 - 我不会期待将来会有一个,因为它的使用相当有限。 (根据我的经验,这不是经常出现的情况。)
答案 1 :(得分:0)
似乎“不自然”,因为TA = TB,你的班级不能被使用。
对我来说,自然是这样,除了你的班级定义你的班级的“相同类型”版本:
公共类FooBar&lt; T&GT; {
public static T operator +(T b, FooBar<T> fooBar) { return fooBar.Foo(b); } public T Foo(T b) { ... }
}
在TA = TB时使用(与某些类的非泛型版本存在类似的方式)。