假设我想使用加法运算符 ( +) 作为委托,我将如何将它传递给方法?
寻找类似于 Python 的operator.add.
例如,而不是
var center = _drawingPoly.Aggregate((a, b) => a + b)/_drawingPoly.Count;
我想写一些类似的东西:
var center = _drawingPoly.Aggregate(operator+)/_drawingPoly.Count;
(仅供参考,+这里超载)
假设我想使用加法运算符 ( +) 作为委托,我将如何将它传递给方法?
寻找类似于 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;
不幸的是,这种方法不是类型安全的,您可能希望缓存创建的结果委托。
唉,该语言没有这样的功能。