假设我想使用加法运算符(+
)作为委托,我该如何将其传递给方法?
寻找与Python的operator.add
类似的东西。
var center = _drawingPoly.Aggregate((a, b) => a + b)/_drawingPoly.Count;
我想写一些类似的东西:
var center = _drawingPoly.Aggregate(operator+)/_drawingPoly.Count;
(仅供参考,此处+
超载)
答案 0 :(得分: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;
遗憾的是,这种方法不是类型安全的,您可能希望缓存创建的结果委托。
答案 1 :(得分:2)