为操作员预先安排的代表
本文关键字:操作员 | 更新日期: 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;
不幸的是,这种方法不是类型安全的,您可能需要缓存创建的结果委托。
唉,该语言没有这样的功能。