对类类型参数的约束表示类型不能相等

本文关键字:类型 不能 表示 约束 类型参数 | 更新日期: 2023-09-27 18:20:37

我想知道C#中是否有任何类型约束声明一个类型参数不等于另一个类型形参;像这样的。。。

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()而言,这将是不明确的!虽然这不是必要的,但如果可能的话,我希望能够实现。。。

对类类型参数的约束表示类型不能相等

不,C#中没有这样的约束,而且我不希望将来会有,因为它的用途相当有限。(根据我的经验,这种情况并不常见。)

仅仅因为TA=TB而不能使用您的类似乎是"不自然的"。

对我来说,自然的是,除了你的类之外,还定义了一个"相同类型"的类版本:

公共类FooBar<T> {

public static T operator +(T b, FooBar<T> fooBar)
{
    return fooBar.Foo(b);
}
public T Foo(T b) { ... }

}

当TA=TB时使用(与某些类的非通用版本类似)。