繁体   English   中英

从Lambda表达式创建的操作中获取参数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM