2011-01-21 11 views
6

Lütfen koduma bir göz atın: Bir İfade Ağacıyla myCar oluşturmaya çalışıyorum. Lambda bildirimi için sağlanan parametre sayısı

ben bu hat var m = Expression.Lambda<Func<Engine,... mesaj lambda beyanı için verilen parametrelerin Yanlış numaradır üzerinde ArgumentException olsun.

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

Neyin yanlış olduğunu ve hatayı nerede yaptığımı anlayamıyorum. Şimdiden teşekkürler.

+0

Ayrıca bkz http://stackoverflow.com/questions/8035287/linq-create-logical-inverse motoru belirtmelisiniz -of-sentezleme – nawfal

cevap

12

Sen parametreler ParameterExpression [] parametreleri 'Expression.Lambda

parçası
var m = Expression.Lambda<Func<Engine, Car>>(Expression.New(ci, engine), engine) 
İlgili konular