【发布时间】:2021-01-25 06:51:15
【问题描述】:
考虑两个泛型类
class Result<T1, T2> {}
class Value<T> {}
是否有某种方法可以重载 + 运算符,从而允许我编写以下内容,以便在结果中正确捕获类型,即 r 的类型为 Result<int,string>?
Value<int> a;
Value<string> b;
var r = a + b;
我可以这样写:
class Value<T> {
public static Result<T,T> operator+(Value<T> a, Value<T> b) { ... }
}
这适用于任何一对Value<T>,例如两个Value<int>,但是当类型不同时呢?
查看以前有关 C# 运算符重载的问题,似乎没有一个回答这个特定问题。这个可能是最接近的:Overloading operator for generics C#
这样做的动机是,如果Result<T1, T2> 类有一个将委托作为参数的方法,那么在编译时知道T1 和T2 的具体类型就可以从调用该方法时的 lambda 表达式。
【问题讨论】:
-
所以您希望为
Value<T>和Value<U>为T和U的任何两种类型定义一个运算符+? -
@Sweeper 没错。