System.Linq.Expressions.Expression.Call
方法用于创建一个表示方法调用的表达式。这个方法允许您动态地构建方法调用表达式,从而可以在运行时动态地调用方法。
Call
方法接受一个 MethodInfo
对象来指定要调用的方法,以及一个可选的 Expression
对象作为方法的目标对象(如果是静态方法,则目标对象可以为 null
),以及一个 Expression[]
数组作为方法的参数列表。
例如,下面的代码展示了如何使用 Call
方法创建一个简单的方法调用表达式:
using System;
using System.Linq.Expressions;
using System.Reflection;
class Program
{
static void Main()
{
// 获取 Console.WriteLine 方法的 MethodInfo 对象
MethodInfo writeLineMethod = typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) });
// 创建一个表示方法调用的表达式
Expression callExpression = Expression.Call(writeLineMethod, Expression.Constant("Hello, world!"));
// 编译并执行表达式
var lambda = Expression.Lambda<Action>(callExpression);
var action = lambda.Compile();
action(); // 调用 Console.WriteLine("Hello, world!");
}
}