2013-03-20 8 views
13

मैं कुछ याद आ रही हूँ या नहीं इस तरह के रूप में एक लैम्ब्डा समारोह से एक मूल्य के वापस जाने के लिए संभव है ..सी # लैम्ब्डा कार्य: लौटने डेटा

Object test =() => { return new Object(); };

या

string test =() => { return "hello"; };

मैं एक बिल्ड त्रुटि प्राप्त करें "लैम्बडा अभिव्यक्ति को 'स्ट्रिंग' टाइप करने के लिए परिवर्तित नहीं कर सकता क्योंकि यह एक प्रतिनिधि प्रकार नहीं है"।

ऐसा लगता है कि यह वाक्यविन्यास लैम्ब्डा के परिणाम के बजाय लैम्ब्डा को असाइन करता है, जिसकी मुझे उम्मीद नहीं थी। मैं फ़ंक्शन को फ़ंक्शन को असाइन करके वांछित कार्यक्षमता प्राप्त कर सकता हूं और इसे नाम से कॉल कर सकता हूं, लेकिन क्या यह एकमात्र तरीका है?

कृपया नहीं "आपको ऐसा करने की आवश्यकता क्यों होगी?" मेरे उदाहरण के बारे में।

अग्रिम धन्यवाद!

+0

@IAbstract आपके संपादन ने पूरी तरह से प्रश्न बदल दिया है इसलिए मैंने इसे वापस घुमाया। –

+0

@ कोनराड रुडॉल्फ: अजीब ... मैं * आखिरी 2 लाइनों को हटाने के लिए * कोशिश कर रहा था। इसे पकड़ने के लिए धन्यवाद। :) – IAbstract

+0

संभावित डुप्लिकेट [अज्ञात विधि के साथ मूल्य कैसे वापस करें?] (Http://stackoverflow.com/questions/10520892/how-to-return-value-with-anonymous-method) – Roflo

उत्तर

32

यह संभव है लेकिन आप string पर लैम्ब्डा असाइन करने का प्रयास कर रहे हैं।

Func<string> f =() => { return "hello"; }; 
string test = f(); 

त्रुटि संदेश वास्तव में यह सब कहते हैं::

लैम्ब्डा अभिव्यक्ति कनवर्ट नहीं कर सकता टाइप करने के लिए 'स्ट्रिंग'

... कि वास्तव में है - आप लैम्ब्डा आह्वान करने की जरूरत है यहां मुद्दा

यदि आप लैम्ब्डा इनलाइन का आह्वान करना चाहते हैं - लेकिन वास्तव में: क्यों? - आप इसे भी कर सकते हैं, आपको पहले इसे एक प्रतिनिधि में स्पष्ट रूप से बनाने की आवश्यकता है:

string test = (new Func<string>(() => { return "hello"; }))(); 
+1

एक लैम्ब्डा अभिव्यक्ति को असाइन करना निहित रूप से टाइप किए गए चर काम नहीं करेंगे। – sloth

+0

@ डोमिनिककेक्सेल आह, बहुत सच है। –

+0

आह जो जल्दी था। जब आपने उत्तर दिया तो बस मेरे प्रश्न को संपादित कर रहा था। क्या एक Func को असाइन करने के बजाए लैम्ब्डा इनलाइन को आमंत्रित करना संभव है? धन्यवाद! –

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