एक लैम्ब्डा अभिव्यक्ति एक अज्ञात फ़ंक्शन लिखने का एक तरीका है, यानी नाम के बिना कोई फ़ंक्शन। "तीर" के बाईं तरफ आपके पास फ़ंक्शन पैरामीटर हैं, और आपके पास दाईं ओर क्या है फ़ंक्शन बॉडी है। इस प्रकार, (x => x.Name)
तार्किक रूप से string Function(Data x) { return x.Name }
जैसे string
और Data
पर कुछ रूप से अनुवाद करता है, स्पष्ट रूप से भिन्न होगा और संदर्भ से लिया जाएगा।
बाईं ओर पैरामीटर के अभाव पैरामीटर के बिना एक समारोह में तब्दील हो, ताकि इस (() => someVariable)
तार्किक इस के लिए अनुवाद: string Function() { return someVariable; }
इस बिंदु आप सोच, जहां someVariable
से आता है शुरू हो सकता है, यह एक समारोह नहीं है पैरामीटर और यह फ़ंक्शन में परिभाषित नहीं है। आप सही होंगे, इस तरह का एक समारोह कभी संकलित नहीं होगा। हालांकि इस तरह का लैम्ब्डा फ़ंक्शन पूरी तरह ठीक है, क्योंकि यह बाहरी-स्कोप चर को हटाया जाता है और इस तरह उपयोग किया जाता है। (आंतरिक रूप से एक रैपर वर्ग बनाया जाता है जहां लैम्ब्डा अभिव्यक्ति में उपयोग किए जाने वाले चर फ़ील्ड बन जाते हैं।)
अब देखते हैं कि model => item.FirstName
का अर्थ क्या है। तर्कसंगत रूप से यह string Function(Model model) { return item.FirstName; }
में अनुवाद करेगा। असल में यह एक पैरामीटर के साथ एक समारोह है, लेकिन इस पैरामीटर का उपयोग नहीं किया जाता है।
और अब, जानकारी का अंतिम भाग। यद्यपि लैम्ब्डा अभिव्यक्ति अंत में कार्यों का प्रतिनिधित्व करती है, कभी-कभी उन्हें वास्तव में निष्पादित करने के उद्देश्य से नहीं बनाया जाता है (हालांकि संभावित रूप से वे कर सकते हैं)। एक लैम्ब्डा अभिव्यक्ति को अभिव्यक्ति वृक्ष के रूप में दर्शाया जा सकता है। इसका मतलब है कि इसे निष्पादित करने के बजाय यह पार्स किया जा सकता है।
इस विशेष मामले में एमवीसी इंजन चलाता है जो लैम्ब्डा अभिव्यक्ति का प्रतिनिधित्व करता है। इसके बजाय अभिव्यक्ति पार्स है ताकि एमवीसी इंजन जानता है कि इस विशेष पंक्ति के लिए कौन सी एचटीएमएल उत्सर्जित हो। यदि आपका डेटा आइटम सीधे आपके मॉडल ऑब्जेक्ट से नहीं आता है, तो लैम्ब्डा अभिव्यक्ति का बायां हिस्सा कोई फर्क नहीं पड़ता।
स्रोत
2012-04-11 00:20:42
आपको लगता है कि क्रियान्वयन का परीक्षण किया है: इसके बजाय एचटीएमएल सहायक वर्ग का उपयोग कर के, हम बस सही उत्पादन इस प्रकार प्रदान कर सकते हैं? क्या यह काम करता है? इस तरह से डॉट नोटेशन का उपयोग करना अच्छा लगेगा, मैं इंप्रेशन के तहत था कि इसे केवल इंडेक्स के माध्यम से एक्सेस किया जा सकता था। –
हाँ, यह वही है जो मैं ट्यूटोरियल दिखाता हूं और इसे थोड़ी देर के लिए कर रहा हूं। मैंने हमेशा सोचा है, क्यों मॉडल Item => modelItem.FirstName ... ने भी कोशिश की और काम नहीं किया। हां, यह डॉट-नोटेशन का उपयोग करने के लिए बहुत बेहतर होगा। ऐसा लगता है कि मुझे एक तरह से "हैक" लगता है। मुझे आशा है कि भविष्य में डॉट-नोटेशन संभव होगा .. –
'ग्रीममिलर के लिंक के मुताबिक, एक और उचित तरीका '@ एचटीएमएल। डिस्प्लेफोर (() => आइटम। फर्स्टनाम)' –