Reputation: 35
I have two dummy classes named TClass1
and TClass2
. I would like to know how to build an expression tree to call the operation TClass1.TestMethod
. I specifically have problem using Expression.Call
method to create an expression based on instance methods of a class. Any help would be appreciated.
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; }
}
Upvotes: 2
Views: 6621
Reputation: 810
Try this code:
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();
Upvotes: 11