3

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

寻找类似于 Python 的operator.add.

例如,而不是

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

我想写一些类似的东西:

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

(仅供参考,+这里超载)

4

2 回答 2

3

没有内置任何东西,但你可以使用表达式树来做到这一点:

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;

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

于 2013-02-24T19:33:20.893 回答
2

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

于 2013-02-24T19:26:27.140 回答