2016-12-30 4 views

答えて

4

としてよりも呼び出すことができますができない。これを行うには、Expression<Action>(MSDNのExpressionを参照)が必要で、ActionからExpression<Action>に変換することはできません。

Further reading

+0

それは私の最初の概念でした。私はアクションをシリアライズするために必要でした。 – Martin

1

あなたはこのような何かを意味しています:

Action<int,int> act = (a,b) => new Program().Test(a,b); 

それはact(1,2);

+1

「act」と「1」と「2」の取得方法について質問がありますか? –

0

Actionを使用して行うことができないが、ラムダ式はまたExpression<Action>として扱うことができ、それが可能となります。それは我々がメソッド呼び出しを持っている知識を使用して、我々はパラメータとして定数を使用すること:コードは以下の式のみのこの種のために働くことを

注意。

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     var values = GetParams(() => Test(1, 2)); 
     foreach (var v in values) 
      System.Diagnostics.Debug.Print(v.ToString()); 
    } 

    private object[] GetParams<T>(Expression<Func<T>> expr) 
    { 
     var body = (MethodCallExpression)expr.Body; 
     var args = body.Arguments; 
     return args.Select(p => ((ConstantExpression)p).Value).ToArray(); 
    } 

    public int Test(int arg1, int arg2) 
    { 
     return arg1 + arg2; 
    } 
} 
関連する問題