2012-04-19 11 views
8

को देखते हुए निम्न नमूना कोड:कोष्ठक का उपयोग करके प्रतिनिधि को अज्ञात विधि असाइन करने के लिए संकलक त्रुटि देता है?

static void SomeMethod() 
{ 
    Action<int,int> myDelegate; 

    //... 

    myDelegate = delegate { Console.WriteLine(0); }; 
    myDelegate = delegate() { Console.WriteLine(0); }; // compile error 

} 

myDelegate = delegate { Console.WriteLine(0); }; 

और

myDelegate = delegate() { Console.WriteLine(0); }; 

के बीच क्या अंतर है?

इस उदाहरण में, दूसरा कथन संकलन त्रुटि उत्पन्न करता है जबकि पहले वाला नहीं होता है।

उत्तर

21

एक गुमनाम विधि वाक्य रचना delegateपैरामीटर-सूची{बयान-सूची} है। पैरामीटर सूची वैकल्पिक है।

यदि आप पैरामीटर सूची छोड़ दें तो अज्ञात विधि किसी भी प्रतिनिधि प्रकार के साथ संगत है जहां पैरामीटर को "आउट" या "रेफरी" चिह्नित नहीं किया जाता है।

यदि आप पैरामीटर सूची आपूर्ति करते हैं तो यह प्रतिनिधि पैरामीटर प्रकारों से बिल्कुल मेल खाना चाहिए।

अपने पहले मामले में आप इसे छोड़ रहे हैं, और दूसरे मामले में आप इसे आपूर्ति कर रहे हैं लेकिन प्रतिनिधि पैरामीटर से मेल नहीं खाते हैं। तो delegate {} कानूनी है, और delegate (int i, int j) { } कानूनी है, लेकिन delegate() {} नहीं है।

जो भी हो, तो आप शायद एक लैम्ब्डा अभिव्यक्ति का उपयोग कर बेहतर कर रहे हैं; यह नए कोड में अधिक सामान्य वाक्यविन्यास है: (i, j)=>{ };

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