C# 构建表达式树并使用Expression.Call方法

C# 构建表达式树并使用Expression.Call方法,c#,expression-trees,C#,Expression Trees,我有两个名为TClass1和TClass2的虚拟类。我想知道如何构建表达式树来调用操作TClass1.TestMethod。我在使用Expression.Call方法创建基于类的实例方法的表达式时遇到了问题。任何帮助都将不胜感激 public class TClass1 { public string Prop1 { get; set; } public int Prop2 { get; set; } public TClass2 TestMethod(TClass2

我有两个名为
TClass1
TClass2
的虚拟类。我想知道如何构建表达式树来调用操作
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();
var par1=Expression.Parameter(typeof(TClass2),“tc2”);
var par2=表达式参数(typeof(int),“c”);
var instance=Expression.Parameter(typeof(TClass1),“inst”);
var infe=Expression.Call(实例,typeof(TClass1).GetMethod(“TestMethod”),par1,par2);
var exp=Expression.Lambda(inf,实例,
par1、par2);
var deleg=exp.Compile();