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ş:
Bir veya daha fazla türde bulunamıyor ...
Mu "yazılmamış" yani "d...
Href ifade <a href="javascript...
"geçerli yöntemin optimize kod&qu...
Ve İfade Ağaçları seri Kaldırmada C#...