2010-01-14 80 views
5

एक डेवलपर के रूप में, हम अक्सर उस अपवाद का सामना करते हैं: NullReferenceException अच्छी तरह से ज्ञात त्रुटि संदेश के साथ:क्यों ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के इंस्टेंस पर सेट नहीं है 'और अधिक वर्णनात्मक नहीं है?

ऑब्जेक्ट रेफरेंस ऑब्जेक्ट

के उदाहरण पर सेट नहीं है। यह .NET के लिए संभव नहीं है थोड़ा सा अर्थपूर्ण कुछ वापस करने के लिए ढांचा?

कुछ ऐसा है:

प्रकार का प्रकार एक्स नामित वाई किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है

उत्तर

15

किसी ऑब्जेक्ट का नाम नहीं है - तो यह आपको नाम कैसे बता सकता है? अशक्त संदर्भ एक चर से लोड किया गया हो सकता है - या यह आदि

JIT ढेर जानकारी पर शायद देखो बाहर काम करने के सकता है क्या घोषित संदर्भ प्रकार था एक विधि द्वारा दिया गया हो सकता है, संपत्ति , लेकिन मुझे यकीन नहीं है कि यह कितनी बार मदद करेगा - और निस्संदेह यह चीजों को धीमा कर देगा।

मैं नहीं कह सकता कि मैंने कभी यह डिबगिंग की बात करते समय एक बड़ा बोझ पाया है - यदि ऐसी कई चीजें हैं जो एक पंक्ति पर शून्य हो सकती हैं, जो आम तौर पर सुझाव देती है कि उन्हें विभाजित करना उचित है अधिक।

+1

बेहद विस्तृत स्टैक ट्रेस के लिए धन्यवाद, मुझे नहीं लगता कि इसे और अधिक विस्तृत होने की आवश्यकता है। इसके अलावा वे वास्तव में पहली जगह से बचने के लिए आवेषण का उपयोग करना चाहिए। – ChaosPandion

+2

किसी भी प्रकार की डिबगिंग चीजों को धीमा कर देती है। मुझे आश्चर्य है, हालांकि, क्या यह चीजों को धीमा कर देगा * इतना * यह तुलना करता है कि इससे चीजों को कितना गति मिलेगी और सभी वस्तुओं को अलग-अलग लाइनों में तोड़ने की ज़रूरत नहीं होगी, या पता लगाने के लिए तत्काल खिड़की से पागल हो जाएंगे कौन सा ऑब्जेक्ट शून्य है? –

+0

सहमत हैं कि यह समस्या वह बोझिल नहीं है। उस बिंदु से पहले एक या दो पंक्तियां जहां नल संदर्भ अपवाद हुआ था, आपको बताएगा कि वास्तव में क्या प्रारंभ नहीं किया जा रहा है। –

1

के लिए नहीं सेट क्योंकि वह कहने का सर्वाधिक सामान्य तरीका है।

2

मेरे लिए यह वरीयता का एक मुद्दा जैसा लगता है। यदि यह आपको बहुत अधिक खराब करता है, तो आप हमेशा NullReferenceException को उपclass कर सकते हैं और संदेश बदल सकते हैं। :)

संदेश के निर्माण के दौरान उपलब्ध जानकारी की मात्रा के बावजूद यह क्या आता है। कुछ अतिरिक्त जानकारी में मैन्युअल रूप से गुजरने के बिना, बस NullReferenceException के अंदर शून्य के क्षेत्र का नाम निर्धारित करने के लिए प्रतिबिंब (संभवतः काफी थोड़ा) की आवश्यकता होगी, जो एक भारी लोड ऑपरेशन है। उदाहरण के लिए ArgumentNullException लें, जिसमें संदेश को अपमानजनक पैरामीटर नाम इंगित करने के लिए, आपको इसे स्ट्रिंग में पास करना होगा जब आप इसे कॉल करते हैं: throw new ArgumentNullException("param1")

अपवाद संदेश में विस्तार का स्तर पूरी तरह से प्रोग्रामर तक है जो इसे परिभाषित करता है, लेकिन यह अपवाद फेंकने पर सिस्टम को गहन करने से बचने के लिए समझदार है।

+0

मुझे पूरा यकीन है कि ढांचा NullReferenceException फेंकता है। – ChaosPandion

+0

यह करता है, लेकिन आप हमेशा {try {} पकड़ सकते हैं {NullReferenceException e) {नया कूलर नूल रेफरेंस अपवाद (ई)} या कुछ ऐसी चीज फेंक सकते हैं। –

+0

आह मैंने अभी आपके जवाब में स्माइली देखी है। :) – ChaosPandion

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

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