Expression.Compile
Expression.Compile ile çalışma zamanında delege oluşturmayı öğrenirsin.
Expression.Compile
Compile(), bir ifade ağacını çalışma zamanında çalıştırılabilen bir delegeye çevirir. var fn = expr.Compile(); ile bir Func<T> elde edersin ve fn(5) gibi çağırabilirsin.
Çevrim, çalışma zamanında IL üretip delegeyi sarmalar; bu yüzden ilk çağrıda bir maliyeti vardır, sonraki çağrılar hızlıdır. Dinamik kod üretimi, karar motorları ve ifade tabanlı sorgu sağlayıcıları için kritik bir araçtır.
Compile ne zaman kullanılır?
Compile, ifade ağacını çalışma zamanında ürettiğin durumlarda kullanılır. Örneğin kullanıcıdan gelen koşulları birleştirip bir filtre oluşturduysan, sonucu Compile ile delegeye çevirip veri üzerinde çalıştırırsın.
Karar motorları ve dinamik sorgu sistemleri bunun tipik kullanımlarıdır. İfade ağacı derleme sırasında hazırsa, Expression<T> zaten bir delege olabileceği için Compile'a gerek kalmaz.
Uygulama Compile ile delege üret ve çağır
Expression<Func<int, int>> square = x => x * x; ile bir ifade ağacı tanımla. Func<int, int> fn = square.Compile(); ile delege üret. fn(5) sonucunu Console.WriteLine ile yazdır.
Örnek çözümü göster
Expression<Func<int, int>> square = x => x * x; ile ifade ağacını tanımla. Func<int, int> fn = square.Compile(); ile delege üret. Console.WriteLine(fn(5)); ile sonucu yazdır.
Örnek çözüm:
using System;
using System.Linq.Expressions;
class Program
{
static void Main()
{
Expression<Func<int, int>> square = x => x * x;
Func<int, int> fn = square.Compile();
Console.WriteLine(fn(5));
}
}
Kendini test et
-
Compile çağrısını tamamla
var fn = expr.____();Cevabı göster
var fn = expr.Compile(); -
Compile ne döndürür?
- Bir Expression ağacı
- Bir string
- Bir Type nesnesi
- Çalıştırılabilen bir delege
Cevabı göster
Çalıştırılabilen bir delege — Doğru. Compile, çalıştırılabilen bir delege döndürür.
-
Metodu amacına eşle
- Compile
- Delege üretir
- Invoke
- Delegeyi çağırır
- NodeType
- İşlem türü verir
- Parameters
- Parametre listesini verir