对类型参数的约束说类型必须不相等?

时间:2014-09-03 21:53:08

标签: c# operators type-constraints

我想知道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()!虽然这不是必需的,但我希望能够在可能的情况下实现这一点......

2 个答案:

答案 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时使用(与某些类的非泛型版本存在类似的方式)。