C# 从lambda表达式创建的操作中获取参数
当我只有Action委托时,如何获取参数1和2C# 从lambda表达式创建的操作中获取参数,c#,lambda,delegates,C#,Lambda,Delegates,当我只有Action委托时,如何获取参数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) { } } 你的意思是这样的: Action<int,int> act
public class Program
{
public static void Main(string[] args)
{
Action act = () => new Program().Test(1, 2);
}
public void Test(int arg1, int arg2)
{
}
}
你的意思是这样的:
Action<int,int> act = (a,b) => new Program().Test(a,b);
Action act=(a,b)=>newprogram().Test(a,b);
它可以被称为
act(1,2)代码>您的意思是这样的:
Action<int,int> act = (a,b) => new Program().Test(a,b);
Action act=(a,b)=>newprogram().Test(a,b);
它可以被称为act(1,2)代码>您不能。为此,您需要MSDN中的表达式),并且无法从操作
转换为表达式您无法。要做到这一点,您需要MSDN中的表达式),并且您不能将操作
转换为表达式这不能使用操作
,但lambda表达式也可以被视为表达式
,然后它就成为可能
请注意,下面的代码仅适用于此类表达式:它使用了我们有一个方法调用以及我们使用常量作为参数的知识
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;
}
}
公共类程序
{
公共静态void Main(字符串[]args)
{
var值=GetParams(()=>Test(1,2));
foreach(值中的var v)
System.Diagnostics.Debug.Print(v.ToString());
}
私有对象[]GetParams(表达式表达式表达式)
{
var body=(MethodCallExpression)expr.body;
var args=body.Arguments;
返回args.Select(p=>((ConstantExpression)p.Value).ToArray();
}
公共整数测试(整数arg1、整数arg2)
{
返回arg1+arg2;
}
}
不能使用操作
,但lambda表达式也可以被视为表达式
,然后它就成为可能
请注意,下面的代码仅适用于此类表达式:它使用了我们有一个方法调用以及我们使用常量作为参数的知识
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;
}
}
公共类程序
{
公共静态void Main(字符串[]args)
{
var值=GetParams(()=>Test(1,2));
foreach(值中的var v)
System.Diagnostics.Debug.Print(v.ToString());
}
私有对象[]GetParams(表达式表达式表达式)
{
var body=(MethodCallExpression)expr.body;
var args=body.Arguments;
返回args.Select(p=>((ConstantExpression)p.Value).ToArray();
}
公共整数测试(整数arg1、整数arg2)
{
返回arg1+arg2;
}
}
我想问题是:给定act
,如何检索1
和2
?我想问题是:给定act
,如何检索1
和2
?这是我最初的概念。我需要它来序列化这个动作。这是我最初的想法。我需要它来序列化这个动作。