SORU
27 NİSAN 2009, PAZARTESİ


Neden İfade<İşlev<T> kullanırsınız;> yerine İşlev<T>?

Lambda ve Func Action delegeler anlıyorum. Ama ifadeler güdük bana. Hangi durumlarda Expression<Func<T>> yerine Func<T> düz eski kullanırsınız?

CEVAP
27 NİSAN 2009, PAZARTESİ


İfade ağaçları gibi lambda ifadeleri kabul eder ve onları içine bak onları idam etmek yerine, istediğiniz zaman. Örneğin, LINQ to SQL deyimi alır ve eşdeğer SQL deyimi dönüştürür ve bunu sunucuya gönderir (yerine lambda yürütme).

Kavramsal olarak, Expression<Func<T>>tamamen farklıFunc<T>. Func<T> çok güzel bir yöntem işaretçisi olan delegate Expression<Func<T>> gösterir gösterirağaç veri yapısılambda ifade için. Bu ağaç yapısılambda ifadesi ne yaptığını açıklargerçek şeyi yapmak yerine. Temelde ifadeler, değişkenler, yöntem çağrıları bileşimi hakkında veri tutar ... (örneğin bu lambda gibi bilgileri bazı parametre bir sabit tutar). Bu açıklama gerçek bir yöntem (Expression.Compile) dönüştürmek ya da diğer şeyleri kontrol ETMENİZ için örnek, SQL gibi) ile kullanabilirsiniz. Anonim yöntemler ve ifade ağaçları gibi Lambda tedavi Yasası tamamen zaman şey bir derleme.

Func<int> myFunc = () => 10; // similar to: int myAnonMethod() { return 10; }

etkili bir şey alır IL bir yöntem derleme ve 10 verir.

Expression<Func<int>> myExpression = () => 10;

hiçbir parametre alır bir ifade tanımlayan veri yapısı dönüştürülecek değeri 10:

Expression vs Func larger image

Onlar derleme zamanında aynı görünüyor iki iken, derleyici oluştururtamamen farklı.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • HowtoDrawAndPaint

    HowtoDrawAnd

    24 EKİM 2010
  • picster

    picster

    20 NİSAN 2006
  • sknbp

    sknbp

    16 Kasım 2006