构建表达式树和使用表达式.调用方法

本文关键字:表达式 调用 方法 构建 | 更新日期: 2023-09-27 18:17:09

我有两个虚拟类命名为TClass1TClass2。我想知道如何建立一个表达式树来调用操作TClass1.TestMethod。我特别有问题使用Expression.Call方法来创建基于类的实例方法的表达式。如有任何帮助,不胜感激。

public class TClass1
{
    public string Prop1 { get; set; }
    public int Prop2 { get; set; }
    public TClass2 TestMethod(TClass2 tc2, int c)
    {
        return new TClass2() { Cprop1 = "The result: " + this.Prop1 + ".", Cprop2 = this.Prop2 * c };
    }
}
public class TClass2
{
    public string Cprop1 { get; set; }
    public int Cprop2 { get; set; }
}

构建表达式树和使用表达式.调用方法

试试下面的代码:

var par1 = Expression.Parameter(typeof(TClass2), "tc2");
var par2 = Expression.Parameter(typeof(int), "c");
var instance = Expression.Parameter(typeof(TClass1), "inst");
var inExp = Expression.Call(instance,typeof(TClass1).GetMethod("TestMethod"),par1,par2);
var exp = Expression.Lambda<Func<TClass1,TClass2,int,TClass2>>(inExp,instance,
                                                                   par1,par2);
var deleg = exp.Compile();