Construction d'arbres d'expression et utilisation de la méthode Expression.Call

c# expression-trees

Question

J'ai deux classes factices nommées TClass1 et TClass2 . J'aimerais savoir comment créer un arbre d'expression pour appeler l'opération TClass1.TestMethod . J'ai spécifiquement un problème en utilisant la méthode Expression.Call pour créer une expression basée sur les méthodes d'instance d'une classe. Toute aide serait appréciée.

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; }
}

Réponse acceptée

Essayez ce 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();


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi