SORU
3 EKİM 2008, Cuma


C# Lambda ifadeleri: onları Neden kullanmalıyım?

Hızlı Microsoft Lambda Expression belgeleri okuyun.

Örneğin bu tür beni daha iyi anlamak için, ama yardımcı oldu:

delegate int del(int i);
del myDelegate = x => x * x;
int j = myDelegate(5); //j = 25

Yine de, böyle bir yenilik var anlamıyorum. Sadece o zaman ölür bir yöntem değil "yöntem değişken", değil mi bitiyor? Neden gerçek bir yöntem yerine bunu kullanmalıyım?

CEVAP
3 EKİM 2008, Cuma


Lambda expressions isimsiz bir temsilci kullanılabilir anonim delegeler için daha basit bir sözdizimi vardır ve her yerde kullanılabilir. Ancak bunun tersi doğru değildir; lambda ifadeleri ETMENİZ gibi bir çok sihirli SQL sağlayan ifade ağaçlara dönüştürülebilir.

Aşağıdaki LINQ to Objects bir ifade anonim delegeler daha sonra onlar göze ne kadar kolay göstermek için lambda ifadeleri kullanarak bir örnektir

// anonymous delegate
var evens = Enumerable
                .Range(1, 100)
                .Where(delegate(int x) { return (x % 2) == 0; })
                .ToList();

// lambda expression
var evens = Enumerable
                .Range(1, 100)
                .Where(x => (x % 2) == 0)
                .ToList();

Lambda ifadeleri ve anonim delegeler ayrı bir işlevi yazılı bir avantajı var: onlar uygulamak 16 ** izin verebilirsiniz closures işlevi veya bir defalık yaratma kullanım nesneleri.

Expression trees bir API bir ifade yapısına bakmak için izin vermek yerine sadece çalıştırılabilir bir yöntem için bir başvuru almak C çok güçlü yeni bir özelliği# 3.0. Bir API sadece Expression<T> bir parametre içine bir temsilci parametre yapması ve derleyici lambda ifade bir ağaç yerine isimsiz bir temsilci oluşturur:

void Example(Predicate<int> aDelegate);

gibi:

Example(x => x > 5);

olur:

void Example(Expression<Predicate<int>> expressionTree);

İkincisi ifadesi x > 5 açıklayan abstract syntax tree gösterimi geçmiş olsun. SQL bu SERİ, bu davranış C edebilmeli kullanır# ifadeleri SQL ifadeleri filtreleme / etc / sipariş için istediğiniz için. sunucu tarafında.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Fullscreen

    Fullscreen

    23 Mart 2006
  • Klemens Torggler

    Klemens Torg

    11 Mart 2008
  • Michael Zhang

    Michael Zhan

    8 EYLÜL 2012