क्या C # लैंबडा अभिव्यक्ति में एक से अधिक कथन शामिल हो सकते हैं?
(संपादित करें: जैसा कि नीचे दिए गए कई उत्तरों में संदर्भित है, यह प्रश्न मूल रूप से "बयानों" के बजाय "लाइनों" के बारे में पूछा गया है।)
क्या C # लैंबडा अभिव्यक्ति में एक से अधिक कथन शामिल हो सकते हैं?
(संपादित करें: जैसा कि नीचे दिए गए कई उत्तरों में संदर्भित है, यह प्रश्न मूल रूप से "बयानों" के बजाय "लाइनों" के बारे में पूछा गया है।)
जवाबों:
(मैं मान रहा हूं कि आप वास्तव में कई लाइनों के बजाय कई बयानों के बारे में बात कर रहे हैं।)
आप लैंबडा एक्सप्रेशन में ब्रेसेस का उपयोग करके कई स्टेटमेंट का उपयोग कर सकते हैं, लेकिन केवल सिंटैक्स जो ब्रेसिज़ का उपयोग नहीं करता है, उसे एक्सप्रेशन में बदला जा सकता है:
// Valid
Func<int, int> a = x => x + 1;
Func<int, int> b = x => { return x + 1; };
Expression<Func<int, int>> c = x => x + 1;
// Invalid
Expression<Func<int, int>> d = x => { return x + 1; };
आप एक लंबोदर अभिव्यक्ति में जितने चाहें उतने नए अंक डाल सकते हैं; C # नई कहानियों को अनदेखा करता है।
आप शायद कई बयानों के बारे में पूछना चाहते हैं ।
कई बयानों को ब्रेसिज़ में लपेटा जा सकता है।
प्रलेखन देखें ।
चूंकि C # 7:
सिंगल लाइन स्टेटमेंट:
int expr(int x, int y) => x + y + 1;
बहुभाषी कथन:
int expr(int x, int y) { int z = 8; return x + y + z + 1; };
हालाँकि इन्हें स्थानीय कार्य कहा जाता है, मुझे लगता है कि यह निम्न की तुलना में थोड़ा साफ दिखता है और प्रभावी रूप से समान है
Func<int, int, int> a = (x, y) => x + y + 1;
Func<int, int, int> b = (x, y) => { int z = 8; return x + y + z + 1; };
Func<string, bool> test = (name) =>
{
if (name == "yes") return true;
else return false;
}
से लैम्ब्डा भाव (सी # प्रोग्रामिंग गाइड) :
एक बयान लंबोदर के शरीर में किसी भी संख्या में बयान शामिल हो सकते हैं; हालाँकि, व्यवहार में आमतौर पर दो या तीन से अधिक नहीं होते हैं।
सी # 7.0 के साथ आप इस तरह का भी उपयोग कर सकते हैं
Public string ParentMethod(int i, int x){
int calculation = (i*x);
(string info, int result) InternalTuppleMethod(param1, param2)
{
var sum = (calculation + 5);
return ("The calculation is", sum);
}
}
मान लें कि आपके पास एक वर्ग है:
public class Point
{
public int X { get; set; }
public int Y { get; set; }
}
इस वर्ग के अंदर C # 7.0 के साथ आप इसे कर्ली कोष्ठक के बिना भी कर सकते हैं:
Action<int, int> action = (x, y) => (_, _) = (X += x, Y += y);
तथा
Action<int, int> action = (x, y) => _ = (X += x, Y += y);
के रूप में ही होगा:
Action<int, int> action = (x, y) => { X += x; Y += y; };
यह तब भी मददगार हो सकता है जब आपको एक लाइन में एक नियमित विधि या कंस्ट्रक्टर लिखने की आवश्यकता होती है या जब आपको अधिक आवश्यकता होती है तो एक स्टेटमेंट / एक्सप्रेशन को एक एक्सप्रेशन में पैक करने की आवश्यकता होती है:
public void Action(int x, int y) => (_, _) = (X += x, Y += y);
या
public void Action(int x, int y) => _ = (X += x, Y += y);
या
public void Action(int x, int y) => (X, Y) = (X + x, Y + y);
दस्तावेज़ीकरण में ट्यूपल्स के विघटन के बारे में अधिक ।