2010-08-11 10 views
14

मिलता है मैं कोड की निम्न पंक्ति की है। मुझे समझ में नहीं आता क्यों है। null की जांच करने के लिए मेरे कोड का पूरा बिंदु नहीं है और यदि ऐसा है तो string.empty असाइन करें? जब मैं DEBUG में चेक करता हूं तो यह बता रहा है कि EditValue == null तो मुझे क्या याद आ रही है?तो null.Equals (शून्य) कारण है कि मैं एक NullReferenceException

+2

lkuDomkain टाइप नहीं कर सकते हैं? जब आप lkuDomainType.EditValue को कॉल करते हैं, तो यह NullReferenceException फेंकता है। –

+2

आपके शीर्षक के कारण: 'a == b'' a.Equals (b) 'जैसा नहीं है। –

+0

@Stefan: महान बिंदु! भविष्य के खोजकर्ताओं के लिए अधिक सटीक होने के लिए परिवर्तित ... धन्यवाद –

उत्तर

26

lkuDomainType.EditValue == null का उपयोग करें, अन्यथा आप एक शून्य ऑब्जेक्ट पर एक इंस्टेंस विधि कॉल करने का प्रयास कर रहे हैं। लेकिन बेहतर विकल्प lkuDomainType.EditValue ?? String.Empty हो सकता है। lkuDomainType को शून्य होने के लिए भी देखें, जब तक कि यह एक वर्ग न हो।

+1

धन्यवाद, हिंडसाइट में काफी स्पष्ट लगता है, निश्चित रूप से एक 'डुह' पल। धन्यवाद। –

+4

+2 (दुर्भाग्य से संभव नहीं है) सही उत्तर और '??' का उपयोग करने की सिफारिश के लिए। –

+0

+1: शून्य का उपयोग करते समय शून्य कोलेसिंग (या '??') ऑपरेटर .NET के लिए एक बढ़िया जोड़ा था और कुछ ऐसा जो मुझे बहुत याद आती है। – Powerlord

15

जब आप Object.Property और Object का उपयोग अपरिभाषित करते हैं, तो आप एक शून्य सूचक को संदर्भित कर रहे हैं और यही कारण है कि आपको अपवाद मिलता है। इसके बजाय, उपयोग:

var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue; 
+5

मुझे सही उत्तर के लिए ए) को जवाब देना था, बी) वाक्य में * dereference * का उपयोग करने के लिए, और बी) लगभग उचित उपयोगकर्ता नाम –

+0

के लिए महान उत्तर, +1, लेकिन SO कहता है कि @ यूरी का जवाब पहले था । हालांकि धन्यवाद। –

+1

@ रिफ्रैक्टेड हां, यह 4 सेकंड तक था :) मुझे '??' – NullUserException

3

आप एक अशक्त वस्तु पर बराबर विधि कॉल करने की कोशिश कर रहे हैं - यह बजाय जैसे कि यह कार्य करें:

lkuDomainType.EditValue == null 
2

EditValue == बातिल। इसका मतलब है कि वहां कोई वस्तु नहीं है। आप शून्य वस्तुओं पर फ़ंक्शंस को कॉल नहीं कर सकते हैं, भले ही फ़ंक्शन है .क्वल्स()।

आप इस मामले में बस "(lkuDomainType.EditValue == null)" कहने से बेहतर हैं।

5

यदि EditValue शून्य है तो आप Equals पर कॉल नहीं कर सकते हैं। इस कैस में आप क्या करना होगा:

var selectedDomainID = lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue; 

या आप ऐसा करके इसे सरल कर सकते हैं:

var selectedDomainID = lkuDomainType.EditValue ?? string.Empty; 
2

आप String.IsNullOrEmpty यहाँ का उपयोग करना चाहिए। इस तरह:

var selectedDomainID = String.IsNullOrEmpty(lkuDomainType.EditValue) ? string.Empty : lkuDomainType.EditValue; 

बराबर एक विधि है, तो आप एक अशक्त वस्तु जो एक अपवाद फेंक रहा है पर एक विधि कॉल करने की कोशिश कर रहे हैं।

+0

मुझे समझ में नहीं आ रहा है, 'स्ट्रिंग। INNullOrEmpty' भी एक * विधि * नहीं है? –

+0

यह एक स्थिर विधि है, यह lkuDomainType.EditValue ऑब्जेक्ट की विधि नहीं है। – brendan

+0

आह, इसे साफ़ करने के लिए धन्यवाद। –

2

जब EditValue रिक्त है आप उस पर बराबर विधि कॉल नहीं कर सकते तो जाँच करने के लिए सबसे अच्छा तरीका है

lkuDomainType.EditValue == null ? string.Empty : lkuDomainType.EditValue; 
3

समस्या उपयोग करने के लिए है कि आप पता चल सके कि यह शून्य से पहले वस्तु का उपयोग कर रहे है। आप ऑब्जेक्ट की Equals विधि को कॉल कर रहे हैं, जो संदर्भ शून्य होने पर विफल रहता है।

आपको lkuDomainType.EditValue == null के लिए अपने lkuDomainType.EditValue.Equals(null) का आदान-प्रदान करना होगा।

0

यदि lkuDomainType.EditValue शून्य है, तो "lkuDomainType.EditValue.Equals (someObject)" कोडिंग के समान है "null.Equals (someObject)"। खैर, जाहिर है, "शून्य" में कोई सदस्य या विधियां नहीं हैं (यदि यह किया गया तो यह शून्य नहीं होगा)। यही कारण है कि आप एक NullReferenceException मिलता है।

अन्य पदों के अधिकांश उदाहरण काम करेंगे, जिसमें स्ट्रिंग.इन्सनुलऑरफेक्टी शामिल है, जो एक विधि है जो एक बूलियन मान देता है।

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