इस मामले में संकलक का पता लगाता है कि s लिखा लेकिन नहीं पढ़ रहा है, और जानबूझ कर चेतावनी को दबा क्योंकि सी # एक कचरा-एकत्र भाषा है
कारण है। , यह विश्वास है या नहीं।
कैसे आपको लगता है कि समझ सकता हूँ?
ठीक है, निम्नलिखित पर विचार करें।
आपके पास एक ऐसा प्रोग्राम है जो एक विधि DoIt() को कॉल करता है जो एक स्ट्रिंग देता है। आपके पास DoIt() के लिए स्रोत कोड नहीं है, लेकिन आप डीबगर में जांच करना चाहते हैं कि इसका रिटर्न वैल्यू क्या है।
अब आपके विशेष मामले में आप अपने साइड इफेक्ट्स के लिए DoIt() का उपयोग कर रहे हैं, न कि इसके वापसी मूल्य। तो अगर आप कहते हैं कि
DoIt(); // discard the return value
अब आप अपने कार्यक्रम डिबगिंग रहे हैं और आप क्योंकि (समय डिबगर टूटता छदाम के लिए कॉल के बाद से) छदाम के रिटर्न मान (और यह वहाँ नहीं है को देखने के लिए जाना), कचरा कलेक्टर पहले से ही अप्रयुक्त स्ट्रिंग साफ़ कर सकता है।
और वास्तव में प्रबंधित डीबगर में "पिछली विधि कॉल द्वारा लौटाई गई चीज़ को देखने" की कोई सुविधा नहीं है। अप्रबंधित सी ++ डीबगर में वह सुविधा है क्योंकि यह ईएक्स रजिस्टर देख सकता है जहां छोड़ा गया वापसी मूल्य अभी भी बैठा है, लेकिन आपके पास प्रबंधित कोड में कोई गारंटी नहीं है कि लौटाया गया मूल्य अभी भी जीवित है अगर इसे छोड़ दिया गया हो।
अब, कोई तर्क दे सकता है कि यह एक उपयोगी विशेषता है और डीबगर टीम को एक सुविधा जोड़नी चाहिए जिससे एक विधि निष्पादन के तुरंत बाद डीबगर ब्रेकपॉइंट हो तो लौटाए गए मूल्यों को जीवित रखा जाता है। यह एक अच्छी सुविधा होगी, लेकिन मैं इसके लिए पूछने के लिए गलत व्यक्ति हूं; डीबगर टीम से पूछें।
गरीब सी # डेवलपर क्या करना है? एक स्थानीय चर बनाओ, परिणाम स्थानीय चर में स्टोर करें, और फिर डीबगर में स्थानीय की जांच करें। डीबगर सुनिश्चित करता है कि स्थानीय लोग कचरे को आक्रामक रूप से एकत्र नहीं करते हैं।
तो आप ऐसा करते हैं और फिर संकलक आपको चेतावनी देता है कि आपके पास स्थानीय है जो केवल पर लिखा गया है और कभी नहीं पढ़ता है क्योंकि पढ़ना करने वाली चीज प्रोग्राम का हिस्सा नहीं है, यह वहां मौजूद डेवलपर है डीबगर देख रहे हैं। यह एक बहुत परेशान उपयोगकर्ता अनुभव है! इसलिए हम उस स्थिति का पता लगाते हैं जहां गैर-स्थिर मान को स्थानीय चर या फ़ील्ड पर असाइन किया जा रहा है जो कभी भी पढ़ता है, और उस चेतावनी को दबाता है। यदि आप अपना कोड बदलते हैं तो इसके बजाय यह string s = "hello";
कहता है तो आपको चेतावनी मिलना शुरू हो जाएगा क्योंकि संकलक कारण, ठीक है, यह संभवतः डीबगर की सीमाओं के आसपास काम करने वाला कोई व्यक्ति नहीं हो सकता है क्योंकि मान है इसे पहले से डीबगर के बिना डेवलपर द्वारा पढ़ा जा सकता है।
यह बताता है कि एक। ऐसे कई अन्य मामले हैं जहां हम चर के बारे में चेतावनियों को दबाते हैं जिन्हें कभी नहीं पढ़ा जाता है; एक detailed exegisis of all the compiler's policies जब हम चेतावनियों की रिपोर्ट करते हैं और जब हम मुझे लिखने में काफी समय नहीं लेते हैं, तो मुझे लगता है कि मैं इसे छोड़ दूंगा।
युक्ति: इसके बजाय 'पकड़ (अपवाद)' का उपयोग करें। यदि आप डीबगर में अपवाद देखना चाहते हैं, तो '$ अपवाद' का उपयोग करें। – Brian