SORU
25 AĞUSTOS 2010, ÇARŞAMBA


C# 4 &; dinamik" ifade ağaçları"

Tüm parçaları bir araya koymak nasıl anlamaya çalışıyorum, ve başlamak için basit bir dava için somut bir kaynak kodu örnek seviniriz.

Aşağıdaki düşünün C# kod:

Func<int, int, int> f = (x, y) => x   y;

Zamanında eşdeğer bir işlevi aşağıdaki gibi ifade ağaçları kullanarak üretebilir

var x = Expression.Parameter(typeof(int), "x");
var y = Expression.Parameter(typeof(int), "y");
Func<int, int, int> f =
    Expression.Lambda<Func<int, int, int>>(
        Expression.Add(x, y),
        new[] { x, y }
    ).Compile();

Şimdi aşağıdaki lambda verilen:

Func<dynamic, dynamic, dynamic> f = (x, y) => x   y;

nasıl eşdeğer ifade ağaçları (ve, muhtemelen, Expression.Dynamic) kullanarak oluşturmak istiyorsunuz?

CEVAP
28 AĞUSTOS 2010, CUMARTESİ


Dinamik bir C temsil eden bir ifade ağacı oluşturabilirsiniz# dinamik bir C CallSiteBinder geçerek ifade ayrıca# İfadeye ayrıca ifade.Dinamik. Özgün dinamik ifade Reflektör çalıştırarak Cildin oluşturmak için bu kodu bulabilir. Örnek bu gibi bir şey gider:

var x = Expression.Parameter(typeof(object), "x");
var y = Expression.Parameter(typeof(object), "y");
var binder = Binder.BinaryOperation(
    CSharpBinderFlags.None, ExpressionType.Add, typeof(Program),
    new CSharpArgumentInfo[] { 
        CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null), 
        CSharpArgumentInfo.Create(CSharpArgumentInfoFlags.None, null)});
Func<dynamic, dynamic, dynamic> f =
    Expression.Lambda<Func<object, object, object>>(
        Expression.Dynamic(binder, typeof(object), x, y),
        new[] { x, y }
    ).Compile();

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BgirlNilaya

    BgirlNilaya

    29 EKİM 2008
  • LaKe Lightroom Tutorials

    LaKe Lightro

    22 Temmuz 2014
  • MrDevin521

    MrDevin521

    18 Temmuz 2010