2008-08-24 6 views
20

मैंने पढ़ा है कि लैम्ब्डा अभिव्यक्तियां सी # के लिए एक अविश्वसनीय रूप से शक्तिशाली जोड़ हैं, फिर भी मैं उन्हें स्वयं द्वारा रहस्यमय पाया। वे मेरे जीवन को कैसे सुधार सकते हैं या अपना कोड बेहतर बना सकते हैं? क्या कोई इस तरह के भाव सीखने के लिए एक अच्छा संसाधन इंगित कर सकता है?लैम्ब्डा अभिव्यक्तियों का अच्छा उपयोग क्या है, और मैं उनका उपयोग कैसे सीख सकता हूं?

वे नरक के रूप में शांत लगते हैं, लेकिन वे एएसपीनेट डेवलपर के रूप में अपने दैनिक जीवन से कैसे संबंधित हैं?

संपादित करें: उदाहरणों के लिए धन्यवाद, और एरिक व्हाइट के लेखों के लिंक के लिए धन्यवाद। मैं अब भी उनको पच रहा हूं। एक त्वरित सवाल: लैम्बडा एक्सप्रेशन पूछताछ के अलावा किसी अन्य चीज़ के लिए उपयोगी हैं? मैंने जो भी उदाहरण देखा है वह एक प्रश्न निर्माण रहा है।

+0

ये अच्छे उत्तर हैं, लेकिन इससे पहले भी पूछा गया है। अन्य [प्रश्न] (http://stackoverflow.com/questions/16501/what-is-a-lambda- कार्यक्षमता) एक अच्छा संसाधन है। –

उत्तर

9

: लैम्ब्डा

लांबा भाव क्वेरी करने के अलावा और कुछ के लिए उपयोगी अभिव्यक्ति कर रहे हैं एक समारोह 'में लाइन' लिखने के लिए एक सुविधाजनक तरीका की तुलना में ज्यादा कुछ भी नहीं कर रहे हैं।

तो वे किसी भी स्थान पर उपयोगी हैं जहां आप थोड़ा कोड चाहते थे जिसे कहा जा सकता है कि यह एक अलग कार्य है लेकिन वास्तव में इसके कॉलर के अंदर लिखा गया है। (फ़ाइल में एक ही स्थान पर संबंधित कोड रखने के अलावा, यह आपको परिवर्तनीय स्कॉइंग के साथ मजेदार गेम खेलने की अनुमति देता है - संदर्भ के लिए 'बंद' देखें।)

गैर-क्वेरी-संबंधी उपयोग का एक उदाहरण एक लम्बा का कोड थोड़ा सा हो सकता है जो कुछ अतुल्यकालिक रूप से करता है जिसे आप थ्रेडपूल से शुरू करते हैं। QueueUserWorkItem। महत्वपूर्ण बात यह है कि आप इसे अज्ञात प्रतिनिधियों (जो एक सी # 2 परिचय थे) का उपयोग करके भी लिख सकते हैं, या सिर्फ एक सादे अलग वर्ग सदस्य समारोह।

यह http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx इन सभी चीजों में एक शानदार चरण-दर-चरण परिचय है, जो आपकी मदद कर सकता है।

6

लैम्बडास सी # के लिए कार्यात्मक प्रोग्रामिंग लाता है। वे अज्ञात कार्य हैं जिन्हें कुछ अन्य कार्यों के मान के रूप में पारित किया जा सकता है। LINQ में सबसे अधिक उपयोग किया जाता है।

List<int> myInts = GetAll(); 
IEnumerable<int> evenNumbers = myInts.Where(x => x % 2 == 0); 

अब जब आप evenNumbers के माध्यम से lamda

x=> x % 2 == 0 

foreach तो myInts करने के लिए एक फिल्टर के रूप में लागू किया जाता है:

यहाँ एक काल्पनिक उदाहरण है।

वे जटिल एल्गोरिदम के लिए पठनीयता में वृद्धि में वास्तव में उपयोगी हो जाते हैं, जिनमें कई घोंसले आईएफ सशर्त और लूप होंगे।

4

यहाँ कुछ का एक सरल उदाहरण शांत आप lambdas के साथ क्या कर सकते हैं:

List<int> myList = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 }; 
myList.RemoveAll(x => x > 5); 
//myList now == {1,2,3,4,5} 

RemoveAll विधि एक विधेय (एक प्रतिनिधि है कि argurments लेता है और एक bool रिटर्न), किसी भी है कि यह मेल खाते भी निकल जाते हैं लेता है। लैम्ब्डा अभिव्यक्ति का उपयोग करना वास्तव में भविष्यवाणी की घोषणा करना आसान बनाता है।