2

後でコードで使用する UnaryExpression のリストを作成したいと考えています。BinaryExpression 用に簡単に作成でき、次のものが得られました。

var binaryList = new Func<Expression, Expression, Expression>[]
        {
            Expression.Add, 
            Expression.Subtract, 
            Expression.Multiply, 
            Expression.Divide
        };

私の UnaryExpression リストでは、Math.Cos(..)、Math.Log(..) を単項演算子として処理できるようにしたいと考えています。アイデアを得るために、私は次のようなものが欲しい

var unaryList = new Func<Expression, Expression>[]
        {
            Expression.Negate, // works fine
            new Func<Expression, Expression>(
                expr => new UnaryExpression(Math.Cos, expr)
        };

助言がありますか?前もって感謝します。

4

2 に答える 2

5

特定の引数で静的メソッドを呼び出すことを表す式のファクトリを作成します。メソッドの呼び出しは で表されMethodCallExpression、そのインスタンスはファクトリ メソッドを介して簡単に作成できますExpression.Call。方法は次のとおりです。

var unary = new Func<Expression, Expression>(
    e => Expression.Call(null, typeof(Math).GetMethod("Cos"), e));

更新:メソッドを処理するときに最初のパラメーター (インスタンス) を完全に省略できる別のオーバーロードがあることに気付きました:Expression.Callstatic

e => Expression.Call(typeof(Math).GetMethod("Cos"), e)
于 2013-03-21T22:25:46.257 に答える