गहरी अंतर्दृष्टि की सराहना की।
मैं अपना सर्वश्रेष्ठ प्रदर्शन करूंगा।
जैसा कि अन्य उत्तरों ने उल्लेख किया है, यहां क्या चल रहा है संकलक यह पता लगा रहा है कि एक अभिव्यक्ति को एक बयान के रूप में इस्तेमाल किया जा रहा है । कई भाषाओं में - सी, जावास्क्रिप्ट और कई अन्य - एक बयान के रूप में अभिव्यक्ति का उपयोग करना पूरी तरह से कानूनी है। 2 + 2;
इन भाषाओं में कानूनी है, भले ही यह एक बयान है जिसका कोई प्रभाव नहीं है। कुछ अभिव्यक्तियाँ केवल उनके मूल्यों के लिए उपयोगी होती हैं, कुछ अभिव्यक्तियाँ केवल उनके दुष्प्रभावों के लिए उपयोगी होती हैं (जैसे कि शून्य वापसी पद्धति के लिए कॉल) और कुछ भाव, दुर्भाग्य से, दोनों के लिए उपयोगी होते हैं। (वेतन वृद्धि की तरह)
बिंदु जा रहा है: केवल अभिव्यक्ति वाले बयान लगभग निश्चित रूप से त्रुटियां हैं जब तक कि उन अभिव्यक्तियों को आमतौर पर उनके मूल्यों की तुलना में उनके दुष्प्रभावों के लिए अधिक उपयोगी नहीं माना जाता है । C # डिजाइनरों ने एक मध्यम जमीन खोजने की इच्छा व्यक्त की, जो कि आमतौर पर साइड-इफेक्टिंग के रूप में सोचा जाता था, उन लोगों को अनुमति देते हुए जिन्हें आमतौर पर उनके मूल्यों के लिए भी उपयोगी माना जाता है। C # 1.0 में पहचाने जाने वाले भावों का समूह वेतन वृद्धि, डिक्रीमेंट, विधि कॉल, असाइनमेंट और कुछ हद तक विवादास्पद, रचनाकार चालान था।
ASIDE: एक आम तौर पर एक वस्तु निर्माण के बारे में सोचता है कि इसका उपयोग उस मूल्य के लिए किया जाता है, न कि निर्माण के दुष्प्रभाव के लिए; मेरी राय में अनुमति new Foo();
देना एक मिसफिट सा है। विशेष रूप से, मैंने इस पैटर्न को वास्तविक-विश्व कोड में देखा है जिससे सुरक्षा दोष उत्पन्न हुआ:
catch(FooException ex) { new BarException(ex); }
यदि कोड जटिल है, तो इस दोष को स्पॉट करना आश्चर्यजनक रूप से कठिन हो सकता है।
इसलिए कंपाइलर उन सभी कथनों का पता लगाने के लिए काम करता है, जो उस सूची में शामिल नहीं हैं। विशेष रूप से, कोष्ठक अभिव्यक्तियों की पहचान बस के रूप में की जाती है - कोष्ठक अभिव्यक्तियाँ। वे "बयान अभिव्यक्तियों के रूप में अनुमत" की सूची में नहीं हैं, इसलिए वे अस्वीकृत हैं।
यह सब C # भाषा के एक डिजाइन सिद्धांत की सेवा में है। यदि आप टाइप (x++);
करते हैं तो आप शायद कुछ गलत कर रहे थे । यह शायद M(x++);
या कुछ और बात के लिए एक टाइपो है। याद रखें, सी # संकलक टीम का रवैया नहीं है " हम किसी तरह से इस काम करने के लिए यह पता लगाने कर सकते हैं? " सी # संकलक टीम का रवैया है " का अगर एक संभावना गलती की तरह प्रशंसनीय कोड दिखता है, चलो डेवलपर को सूचित "। C # डेवलपर्स को वह रवैया पसंद है।
अब, सभी ने कहा, वास्तव में कुछ विषम मामले हैं जहां सी # विनिर्देश स्पष्ट या राज्य को स्पष्ट करता है कि कोष्ठक को अस्वीकार कर दिया गया है, लेकिन सी # संकलक उन्हें वैसे भी अनुमति देता है। लगभग सभी मामलों में निर्दिष्ट व्यवहार और अनुमत व्यवहार के बीच मामूली विसंगति पूरी तरह से हानिरहित है, इसलिए संकलक लेखकों ने इन छोटे बगों को कभी भी तय नहीं किया है। आप यहां उन लोगों के बारे में पढ़ सकते हैं:
क्या रिटर्न myVar बनाम रिटर्न (myVar) के बीच अंतर है?