2009-02-26 5 views
18

मैं से जॉन स्कीट के सी # कुछ कोड चिपकाया है गहराई साइट में:क्रियाओं का उपयोग करते समय लैम्ब्डा अभिव्यक्ति में() का मतलब क्या है?

static void Main() 
{ 
    // First build a list of actions 
    List<Action> actions = new List<Action>(); 
    for (int counter = 0; counter < 10; counter++) 
    { 
     actions.Add(() => Console.WriteLine(counter)); 
    } 

    // Then execute them 
    foreach (Action action in actions) 
    { 
     action(); 
    } 
} 

http://csharpindepth.com/Articles/Chapter5/Closures.aspx

सूचना लाइन:

actions.Add (()

क्या करता है() ब्रैकेट के अंदर मतलब है?

मैंने लैम्ब्डा अभिव्यक्तियों, प्रतिनिधियों, के उपयोग के कई उदाहरण देखे हैं एक्शन ऑब्जेक्ट, आदि लेकिन मैंने इस वाक्यविन्यास का कोई स्पष्टीकरण नहीं देखा है। यह क्या करता है? इसकी आवश्यकता क्यों है?

उत्तर

31

यह लैम्ब्डा अभिव्यक्ति घोषित करने के लिए शॉर्टेंड है जो कोई तर्क नहीं लेता है।

() => 42; // Takes no arguments returns 42 
x => 42; // Takes 1 argument and returns 42 
(x) => 42; // Identical to above 
+0

डांग सिंटैक्स बग – Will

+0

पर प्रकाश डाला सिंटैक्स @ धन्यवाद, मैं दैनिक आधार पर बहुत सी भाषाओं में काम करता हूं – JaredPar

+2

'() 'अनिवार्य है जब आपको एक से अधिक द्रव्यमान की आवश्यकता होती है पैरामीटर: '(एक्स, वाई) => एक्स * वाई' – istepaniuk

5

यह पैरामीटर के बिना एक लैम्ब्डा अभिव्यक्ति है।

1

यह पैरामीटर के बिना अज्ञात फ़ंक्शन को दर्शाता है।

2

MSDN से। एक अभिव्यक्ति लैम्ब्डा फॉर्म (इनपुट) => अभिव्यक्ति लेता है। तो एक lambda की तरह() => अभिव्यक्ति दर्शाती है कि कोई इनपुट पैरामीटर नहीं हैं। कार्रवाई के लिए हस्ताक्षर कोई पैरामीटर नहीं लेता

2

यह पंक्ति क्या है लैम्बडा अभिव्यक्तियों का उपयोग करके सूची में अनाम क्रिया जोड़ने के लिए, जो कोई पैरामीटर नहीं लेता है (यही कारण है कि() वहां हैं) और कुछ भी नहीं देता है तथ्य यह है कि यह केवल काउंटर के वास्तविक मूल्य को प्रिंट करता है।

3

मैं इस तरह lambas के बारे में सोच:

(x) => {वापसी x * 2; }

लेकिन केवल यह महत्वपूर्ण है:

(एक्स) => {वापसी एक्स * 2; }

हम = जरूरत है> पता चला है कि यह कास्टिंग के बजाय एक लैम्ब्डा है, और इस तरह हम इस मिल:

एक्स => x * 2

(कोड के रूप में कोड प्रारूपित नहीं कर के लिए होगा, तो इस खेद क्योंकि आप चीजों को कोड में बोल्ड नहीं कर सकते ..)

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