[英]Get arguments from action created from lambda expression
当我只有动作委托时,如何获得参数1和2?
public class Program
{
public static void Main(string[] args)
{
Action act = () => new Program().Test(1, 2);
}
public void Test(int arg1, int arg2)
{
}
}
你不能 。 为此,您将需要一个Expression<Action>
(请参阅MSDN中的Expression ),并且您不能从Action
转换为Expression<Action>
,只能从另一个方向转换。
您的意思是这样的吗:
Action<int,int> act = (a,b) => new Program().Test(a,b);
它可以被称为act(1,2);
它不能使用Action
来完成,但是lambda表达式也可以视为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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.