विधि शरीर के बिना
केवल लैम्ब्डा अभिव्यक्ति अभिव्यक्ति पेड़ में बदला जा सकता
बाद निर्माणों संकलन कार्य करें:
Func<int> exp1 =() => 1;
Func<int> exp2 =() => { return 1; };
Func<int> exp3 = delegate { return 1; };
Expression<Func<int>> exp4 =() => 1;
और निम्न कार्य नहीं
Expression<Func<int>> exp5 = delegate { return 1; }; //no anonymous delegates
Expression<Func<int>> exp6 =() => { return 1; }; //or lambdas with block body
तो वहाँ है बहुत उन्नत स्तर पर भी अंतर (जो जॉन स्क यहां sick difference example)
एक और अंतर यह है कि यदि आप विधि शरीर के अंदर उन्हें उपयोग करने की योजना नहीं बनाते हैं तो आप पैरामीटर सूची के बिना अनाम प्रतिनिधि बना सकते हैं, लैम्ब्डा के साथ आपको हमेशा पैरामीटर प्रदान करना पड़ता है।
के बाद दो पंक्तियों अंतर
Func<int, int, int, int, int> anonymous = delegate { return 1; };
Func<int, int, int, int, int> lambda = (param1, param2, param3, param4) => 1;
आप अनिवार्य रूप से एक ही बात लेकिन अनाम प्रतिनिधि कर स्पष्ट रूप से यहाँ बेहतर लग रहा है का प्रदर्शन।
स्रोत
2011-08-05 01:08:46
+1, लेकिन लैम्ब्डा अभिव्यक्ति सिर्फ पहिया को फिर से शुरू नहीं कर रहे हैं (बल्कि खराब, जैसा कि मैंने अज्ञात तरीकों को और अधिक समझ में लिया है)। –
तो लैम्बाडा अभिव्यक्ति में वापसी मूल्य नहीं हो सकता है? जबकि अनाम विधि कर सकते हैं? –
स्नॉर्फस: हाँ वे वही काम करते हैं ताकि आप सही हों, यह सिंटैक्स वरीयता का मामला है।साशा: दोनों भेड़ के बच्चे और अज्ञात तरीकों में वापसी मूल्य हो सकते हैं। –