किसी ने भी अज्ञात प्रतिनिधियों का उल्लेख नहीं किया है। तुम्हें पता है, मक्खी पर प्रतिनिधियों बना सकते हैं उन्हें घोषित करने के बिना:
public void Action(Func<int, int> func);
...
Action(delegate(int x) { return x*x; });
सिर्फ लैम्ब्डा वाक्य रचना का एक और अधिक वर्बोज़ संस्करण है कौन सा:
Action(x => x*x);
यह भी ध्यान रखें लैम्ब्डा वाक्यविन्यास और अधिक आक्रामक प्रकार निष्कर्ष है। एक और अंतर यह है कि लैम्ब्डा संकेतन अभिव्यक्ति पेड़ घोषित करने के लिए इस्तेमाल किया जा सकता है:
public void Action(Expression<Func<int, int>>);
Action(x => x*x);
जो मामले तुम क्या मिल में एक समारोह लेकिन एक पार्स पेड़ है कि आप क्रम में जांच कर सकते हैं नहीं है। उदाहरण के लिए, linq क्वेरी उनके एसक्यूएल का निर्माण कैसे करती है।
संपादित
अधिक सीधे जब एक या अन्य का उपयोग करने के सवाल का जवाब देने के लिए:
आप शायद ही कभी, एक नया प्रतिनिधि खुद टाइप घोषित करने के लिए की जरूरत है, हालांकि यह कभी कभी उपयोगी है। फ्रेमवर्क प्रकारों के साथ Action<T>
और Predicate<T>
के साथ प्रदान करता है जो आम तौर पर आपको चाहिए।
फ़्लाई पर 'फ़ंक्शन' बनाते समय, लैम्ब्डा सिंटैक्स के बजाय अज्ञात प्रतिनिधि वाक्यविन्यास का उपयोग करने का कोई फायदा नहीं होता है। चूंकि लैम्ब्डा सिंटैक्स अधिक संक्षिप्त और टाइप-अनुमानित है, इसे पसंद करें।
स्रोत
2010-07-19 15:33:04
[सी #: प्रतिनिधि कीवर्ड बनाम लैम्ब्डा नोटेशन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/299703/c-delegate-keyword-vs-lambda-notation) – Randolpho
रैंडोल्फो, यह इसका डुप्लिकेट नहीं है सवाल। मैं एक लैम्ब्डा अभिव्यक्ति और एक प्रतिनिधि के मूल स्तर पर समझ की तलाश में हूं। – user279521
@Randolpho: जरूरी नहीं कि यहां एक डुप्लिकेट हो। मुझे लगता है कि ओपी के सवाल का सबसे बड़ा हिस्सा यह पूछने में है कि वे क्या हैं, जबकि आप जिस प्रश्न का जिक्र कर रहे हैं वह केवल दोनों के बीच भेद से संबंधित है। –