खोज…


NullReferenceException को समझाया गया

जब आप किसी संदर्भ ऑब्जेक्ट के गैर-स्थैतिक सदस्य (गुण, विधि, फ़ील्ड या ईवेंट) तक पहुँचने का प्रयास करते हैं, तो NullReferenceException को फेंक दिया जाता है, लेकिन यह अशक्त है।

Car myFirstCar = new Car();
Car mySecondCar = null;
Color myFirstColor = myFirstCar.Color; // No problem as myFirstCar exists / is not null
Color mySecondColor = mySecondCar.Color; // Throws a NullReferenceException 
// as mySecondCar is null and yet we try to access its color.

इस तरह के अपवाद को डिबग करने के लिए, यह काफी आसान है: उस पंक्ति पर जहां अपवाद को फेंक दिया गया है, आपको बस हर से पहले देखना होगा ' . 'या' [ ', या दुर्लभ अवसरों पर' ( ')

myGarage.CarCollection[currentIndex.Value].Color = theCarInTheStreet.Color;

मेरा अपवाद कहां से आया है? कोई एक:

  • myGarage null
  • myGarage.CarCollection null
  • currentIndex null
  • myGarage.CarCollection[currentIndex.Value] null
  • theCarInTheStreet null

डिबग मोड में, आपको केवल अपने माउस कर्सर को इन तत्वों में से प्रत्येक पर रखना होगा और आपको अपना अशक्त संदर्भ मिलेगा। फिर, आपको जो करना है वह समझें कि इसका मूल्य क्यों नहीं है। सुधार पूरी तरह से आपकी पद्धति के लक्ष्य पर निर्भर करता है।

क्या आप इसे तुरंत / शुरू करना भूल गए हैं?

myGarage.CarCollection = new Car[10];

क्या आप कुछ अलग करना चाहते हैं यदि ऑब्जेक्ट अशक्त है?

if (myGarage == null)
{
    Console.WriteLine("Maybe you should buy a garage first!");
}

या हो सकता है कि किसी ने आपको एक अशक्त तर्क दिया हो, और माना नहीं गया था:

if (theCarInTheStreet == null)
{
    throw new ArgumentNullException("theCarInTheStreet");
}

किसी भी स्थिति में, याद रखें कि एक विधि को NullReferenceException को कभी नहीं फेंकना चाहिए। यदि ऐसा होता है, तो इसका मतलब है कि आप कुछ जांचना भूल गए हैं।



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow