2011-01-21 21 views
6

Mire mi código: Estoy intentando crear myCar con un árbol de expresiones.Se ha proporcionado un número incorrecto de parámetros para la declaración lambda

Obtengo un ArgumentException en esta línea var m = Expression.Lambda<Func<Engine,... El mensaje es número incorrecto de parámetros suministrados para la declaración 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(); 
    } 
} 

No puedo entender qué ocurre y dónde cometí el error. Gracias por adelantado.

+0

Véase también http://stackoverflow.com/questions/8035287/linq-create-logical-inverse -de expresión – nawfal

Respuesta

12

Debe especificar el motor en el 'params ParameterExpression [] parámetros' parte de Expression.Lambda

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