为操作员预先安排的代表

本文关键字:操作员 | 更新日期: 2023-09-27 18:00:57

假设我想使用加法运算符(+(作为委托,我将如何将其传递给方法?

正在寻找类似Python的operator.add的东西。

例如,代替

var center = _drawingPoly.Aggregate((a, b) => a + b)/_drawingPoly.Count;

我想写一些类似的东西:

var center = _drawingPoly.Aggregate(operator+)/_drawingPoly.Count;

(仅供参考,此处+过载(

为操作员预先安排的代表

没有任何内置功能,但您可以使用表达式树:

public static Func<T, T, T> OpAdd<T>()
{
    var param1Expr = Expression.Parameter(typeof(T));
    var param2Expr = Expression.Parameter(typeof(T));
    var addExpr = Expression.Add(param1Expr, param2Expr);
    var expr = Expression.Lambda<Func<T, T, T>>(addExpr, param1Expr, param2Expr);
    return expr.Compile();
}

然后你可以像一样使用

var center = _drawingPoly.Aggregate(OpAdd<int>())/_drawingPoly.Count;

不幸的是,这种方法不是类型安全的,您可能需要缓存创建的结果委托。

唉,该语言没有这样的功能。