के साथ लैम्ब्डा रूपांतरण यदि मेरे पास () => { throw new Exception(); }
जैसे लैम्ब्डा है, तो यह स्पष्ट नहीं है कि इसमें वापसी का प्रकार है या नहीं। इस वजह से, यह (अंतर्निहित रूप से) Action
और Func<object>
(या किसी अन्य Func<T>
) में परिवर्तित किया जा सकता है। इसका कारण यह है है, §6.5 बेनामी समारोह रूपांतरण सी # 4 कल्पना की के अनुसार:अस्पष्ट रिटर्न प्रकार और ओवरलोड रिज़ॉल्यूशन
[एक] प्रतिनिधि प्रकार
D
एक गुमनाम समारोहF
प्रदान की साथ संगत है:
...
यदि
D
मेंvoid
रिटर्न प्रकार है औरF
का शरीर एक कथन ब्लॉक है, जब [...]का शरीर 10 एक वैध कथन ब्लॉक है जिसमें कोई रिटर्न स्टेटमेंट अभिव्यक्ति निर्दिष्ट नहीं करता है।तो
D
एक गैर शून्य वापसी प्रकार औरF
का शरीर है एक बयान ब्लॉक, जब [...]F
के शरीर एक गैर पहुंच योग्य अंत बिंदु के साथ एक मान्य बयान ब्लॉक है जिसमें प्रत्येकreturn
बयान निर्दिष्ट एक अभिव्यक्ति जोD
के रिटर्न प्रकार के लिए पूरी तरह परिवर्तनीय है।
लेकिन अगर मैं एक विधि है, जहां एक प्रकार Action
और अन्य Func<object>
की एक पैरामीटर है के दो भार के लिए है, और मैं इसे ऊपर से लैम्ब्डा गुजरती हैं, Func<object>
अधिभार प्रयोग किया जाता है। क्यूं कर? विनिर्देश का कौन सा हिस्सा कहता है कि Func<object>
इस मामले में Action
से बेहतर है?
मैंने §7.5.3.2 बेहतर फ़ंक्शन सदस्य पर देखा है, लेकिन यह इसकी व्याख्या नहीं करता है।
और अगर लौटने शून्य है लैम्ब्डा वाक्य रचना के बजाय, आप का उपयोग नोटेशन 'प्रतिनिधि {नई अपवाद() फेंक दें; } 'जहां आप'() 'कोष्ठक में पैरामीटर सूची छोड़ते हैं, वह अज्ञात फ़ंक्शन ** किसी भी ** प्रतिनिधि हस्ताक्षर से मेल खाता है, जिसमें मुझे लगता है, उदा। 'EventHandler' और' एक्शन <ऑब्जेक्ट, EventArgs> '। –
@JeppeStigNielsen हाँ। उस स्थिति में, विधि पैरामीटर के रूप में उन्हें असंबद्ध करने का कोई नियम नहीं है, इसलिए आपको एक संकलन त्रुटि मिल जाएगी। – svick