对类类型参数的约束表示类型不能相等
本文关键字:类型 不能 表示 约束 类型参数 | 更新日期: 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时使用(与某些类的非通用版本类似)。