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 に答える