问题
Please have a look at my code: I'm trying to create myCar
with an Expression Tree.
I get an ArgumentException
on this line var m = Expression.Lambda<Func<Engine,...
The message is Incorrect number of parameters supplied for lambda declaration.
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();
}
}
I can't figure out what's wrong and where I did the error. Thanks in advance.
回答1:
You must specify the engine in the 'params ParameterExpression[] parameters' part of Expression.Lambda
var m = Expression.Lambda<Func<Engine, Car>>(Expression.New(ci, engine), engine)
来源:https://stackoverflow.com/questions/4758817/incorrect-number-of-parameters-supplied-for-lambda-declaration