Nombre incorrect de paramètres fournis pour la déclaration lambda

.net c# expression-trees lambda

Question

Veuillez regarder mon code: j'essaie de créer myCar avec un arbre d'expression.

Je reçois une ArgumentException sur cette ligne. var m = Expression.Lambda<Func<Engine,... Le message indique un nombre incorrect de paramètres fournis pour la déclaration lambda .

public class Engine
{
    public string Name { get; private set; }
    public Engine(string name)
    {
        Name = name;
    }
}
public class Car
{
    private readonly Engine engine;
    public Car(Engine engine)
    {
        this.engine = engine;
    }
    public string GetEngineName(){return engine.Name;}
}
class Program
{
    static void Main(string[] args)
    {
        var ci = typeof (Car).GetConstructor(new[] {typeof (Engine)});

        var engine = Expression.Parameter(typeof (Engine));

        var m = Expression.Lambda<Func<Engine,Car>>(Expression.New(ci, engine))
                          .Compile();

        var myCar = m(new Engine("TDI 2.0"));
        var s = myCar.GetEngineName();
    }
}

Je ne peux pas comprendre ce qui ne va pas et où j'ai commis l'erreur. Merci d'avance.

Réponse acceptée

Vous devez spécifier le moteur dans la partie 'params ParameterExpression [] parameters' de Expression.Lambda.

var m = Expression.Lambda<Func<Engine, Car>>(Expression.New(ci, engine), engine)



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