2010-09-02 9 views
28

मौजूद है, तो मैंने जॉन स्कीट के उत्तर में इस रोचक रेखा here को पढ़ा है।का अर्थ() => सी # में ऑपरेटर, यदि यह

दिलचस्प लाइन यह है, जहां वह एक प्रतिनिधि का उपयोग कर की वकालत:

Log.Info("I did something: {0}",() => action.GenerateDescription()); 

प्रश्न है, यह() => ऑपरेटर क्या है, मुझे आश्चर्य है? मैंने इसे गुगलिंग करने की कोशिश की लेकिन चूंकि यह प्रतीकों से बना है, इसलिए Google वास्तव में बहुत मदद नहीं कर सका। क्या मैंने शर्मनाक रूप से यहाँ कुछ याद किया?

+2

नोट व्याकरण की दृष्टि से यह => है कि ऑपरेटर और() और अभिव्यक्ति है जो अपनी ऑपरेंड हैं है। यह एक अजीब ऑपरेटर है; अधिकांश द्विआधारी ऑपरेटर दो अभिव्यक्तियां लेते हैं, तर्क सूची नहीं और अभिव्यक्ति-या-ब्लॉक। –

उत्तर

46

यह कोई पैरामीटर के साथ एक लैम्ब्डा समारोह (अनाम प्रतिनिधि) का परिचय हो जाएगा, इसके लिए के बराबर है और मूल रूप शॉर्ट हाथ है भी पैरामीटर जोड़ है, तो:

:

(a, b) => a + b 

यह करने के लिए मोटे तौर पर बराबर है

delegate int (int a, int b) { return a + b; } 
+4

शायद 'वापसी कार्रवाई। जेनरेट डिस्क्रिप्शन();', नहीं? – abatishchev

+0

@abatishchev: धन्यवाद, तय। –

+2

वास्तव में, वास्तव में। लैम्बडा सिंटैक्स और अज्ञात विधि वाक्यविन्यास के बीच कुछ सूक्ष्म मतभेदों पर मेरी श्रृंखला के लिए यहां प्रारंभ करें: http://blogs.msdn.com/b/ericlippert/archive/2007/01/10/lambda-expressions-vs- अनाम -methods-part-one.aspx –

2

निर्दिष्ट विधि में एक अनाम प्रतिनिधि बनाना।

delegate void() { return action.GenerateDescription(); } 

आप कर सकते हैं:

शायद, आपके मामले में यह एक Func<string>

3

यह लैम्ब्डा अभिव्यक्ति का एक उदाहरण है जिसे आप here सीख सकते हैं।

+0

एसओ के माध्यम से जाने से भी बेहतर है स्रोत पर सीधे जाना है: http://msdn.microsoft.com/en-us/library/bb397687.aspx –

1

लैम्बडा अभिव्यक्ति के रूप में पैरामीटर के बिना अज्ञात प्रतिनिधि को पास करने का यह तरीका है।

नेट 2,0

Log.Info("I did something: {0}", delegate() 
      { 
       return action.GenerateDescription(); 
      }); 
+0

शायद 'वापसी कार्रवाई। जनरेट डिस्क्रिप्शन();', नहीं? अन्यथा त्रुटि "स्ट्रिंग के लिए शून्य नहीं डाली जा सकती", – abatishchev

+0

@abatishchev जैसे कुछ, शायद हां। इसे मेरे सिर के ऊपर से लिखा है, इसलिए मुझे यकीन नहीं है कि यह संकलन भी करता है। – PiRX

+0

क्या आप कोशिश कर सकते हैं और यदि यह असफल हो जाए - तो कृपया अपनी पोस्ट संपादित करें?) – abatishchev

6

से करने के लिए इसी तरह के "=>" इस, लैम्ब्डा ऑपरेटर है हम हम सिर्फ लैम्ब्डा ऑपरेटर से पहले दौर कोष्ठक का उपयोग किसी भी इनपुट पैरामीटर नहीं है जब।

वाक्य रचना: (इनपुट पैरामीटर) => अभिव्यक्ति

संबंधित मुद्दे