2016-02-18 8 views
5

सी # 6 की अभिव्यक्ति शरीर के सदस्यों के साथ, मैं लिख सकते हैं:कैसे अभिव्यक्ति शरीर सदस्यों शून्य और गैर शून्य के बीच अंतर है?

public string FullName => $"{_firstName} {_lastName}";

और मैं लिख सकते हैं:

static void Print(string message) => Console.WriteLine(message);

पहले उदाहरण में, अभिव्यक्ति कुछ देता है। दूसरे में, यह नहीं है।

किसी भी अतिरिक्त वाक्यविन्यास की आवश्यकता के बिना 'कार्य' करने का तरीका निर्धारित करने के लिए यहां क्या हो रहा है? या यह संकलन समय के दौरान विधि हस्ताक्षर को देखकर बस एक मामला है?

मैं क्या हो रहा है यह जानने के बिना चीजों को 'बस काम' करने के लिए छोड़ने का बड़ा प्रशंसक नहीं हूं।

+1

मुझे लगता है कि '$" ... "' स्ट्रिंग.फॉर्मैट (...) 'का एक छोटा संस्करण है जो निस्संदेह' स्ट्रिंग 'देता है। – HimBromBeere

+1

यह है, यह स्ट्रिंग इंटरपोलेशन नामक एक और सी # 6 सुविधा है। हो सकता है कि मैंने परीक्षण स्निपेट के रूप में इसका उपयोग करके पानी को गड़बड़ कर दिया हो। मेरा प्रश्न इस बारे में अधिक है कि अभिव्यक्ति वाक्यविन्यास कैसे तय करता है कि कब वापस आना है और कब। –

+0

आपके दूसरे उदाहरण में रिटर्न-टाइप 'शून्य' है, है ना? इस पर कोई और संकलक-निर्णय नहीं है। मुझे आपकी समस्या नहीं दिखाई दे रही है। – HimBromBeere

उत्तर

3

पहला, FullName एक संपत्ति है। यह हमेशा एक मान देता है। इसलिए, शरीर का हस्ताक्षर Func<T> होना चाहिए, जहां T रिटर्न प्रकार है (जिसे आपके नमूने में string के रूप में परिभाषित किया गया है) या समकक्ष प्रतिनिधि।

आपकी विधि void Print(string message) का हस्ताक्षर Action<string> है, क्योंकि संकलक समझता है कि शून्य शून्य मान नहीं देता है और एक पैरामीटर लेता है। यह समझता है कुछ बयान एक मूल्य (=> "a") की तरह लौट सकते हैं और कुछ अपने दम पर खड़े हो सकते हैं (हालांकि वे => new object() की तरह मान सकता है)। इसलिए यह आपको बताती हैं कि आप गंदगी कर सकते हैं: : "CS0201 केवल काम, फोन, वेतन वृद्धि, घटती है, और नई वस्तु भाव एक बयान के रूप में इस्तेमाल किया जा सकता"।

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