अनाम प्रतिनिधियों के लिए लैम्ब्डा अभिव्यक्ति एक सरल वाक्यविन्यास है और हर जगह एक अनाम प्रतिनिधि का उपयोग किया जा सकता है। हालांकि, विपरीत सच नहीं है; lambda अभिव्यक्तियों को अभिव्यक्ति पेड़ों में परिवर्तित किया जा सकता है जो LINQ से SQL जैसे बहुत सारे जादू की अनुमति देता है।
निम्नलिखित अनाम अभिव्यक्ति का उपयोग करने वाले ऑब्जेक्ट अभिव्यक्ति के लिए LINQ का एक उदाहरण है, तो लैम्बडा एक्सप्रेशन यह दिखाने के लिए कि वे आँख पर कितना आसान है:
// 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();
लैम्ब्डा एक्सप्रेशन और अनाम डेलीगेट्स के पास एक अलग फंक्शन लिखने पर एक फायदा है: वे क्लोजर लागू करते हैं जो आपको फंक्शन में मापदंडों को जोड़े बिना या एक बार उपयोग की वस्तुओं को बनाने के लिए फंक्शन में लोकल स्टेट पास करने की अनुमति दे सकता है ।
अभिव्यक्ति के पेड़ C # 3.0 की एक बहुत ही शक्तिशाली नई विशेषता है जो एक एपीआई को केवल एक विधि के संदर्भ में देखने की अनुमति देता है जो कि एक विधि का संदर्भ देता है जिसे निष्पादित किया जा सकता है। एक एपीआई को बस एक डेलिगेट पैरामीटर को एक पैरामीटर में बनाना पड़ता है Expression<T>
और कंपाइलर एक अनाम प्रतिनिधि के बजाय एक लैम्ब्डा से एक अभिव्यक्ति ट्री उत्पन्न करेगा:
void Example(Predicate<int> aDelegate);
जैसे कहा जाता है:
Example(x => x > 5);
हो जाता है:
void Example(Expression<Predicate<int>> expressionTree);
उत्तरार्द्ध में अमूर्त वाक्यविन्यास वृक्ष का प्रतिनिधित्व मिलेगा जो अभिव्यक्ति का वर्णन करता है x > 5
। LINQ to SQL इस व्यवहार पर निर्भर करता है ताकि सर्वर पर फ़िल्टरिंग / ऑर्डरिंग / आदि के लिए वांछित SQL अभिव्यक्तियों में C # अभिव्यक्तियों को बदल सके।
delegate
C # में क्या है, मैं इस पृष्ठ के बाकी हिस्सों को पढ़ने से पहले इसे पढ़ने का सुझाव देता हूं : stackoverflow.com/questions/2082615/…