2010-08-11 3 views
10

धागा शीर्षक देखें। क्या मैं NullReferenceException के बारे में चिंता किए बिना सुरक्षित रूप से ऐसा कुछ कर सकता हूं, या यह गारंटी नहीं दी जाती है कि उन बुलियन अभिव्यक्तियों का मूल्यांकन बाएं से दाएं किया जाएगा?क्या यह ऑब्जेक्ट को शून्य के लिए जांचना सुरक्षित है और उसी में अगर-स्टेटमेंट ऑब्जेक्ट के प्रॉपर्टी वैल्यू की तुलना करता है?

// can this throw an NRE? 
if (obj == null || obj.property == value) 
{ 
    // do something 
} 
+9

जबकि यह क्यू। सी # के बारे में है, अगर आपको कभी भी वीबी करने की ज़रूरत है, तो अक्सर यह भूल जाता है कि डिफ़ॉल्ट रूप से वीबीएनईटी * 'ओ' और 'और' के लिए शॉर्ट-सर्किट मूल्यांकन * नहीं करता है, जो हार्ड-टू-बग बग पेश कर सकता है। हालांकि, इस स्पष्ट कमी का समर्थन करने के लिए कीवर्ड 'OrElse' और' AndAlso' 'पेश किए गए हैं। – Abel

+0

'ऑरलेस' ने वीबी टीम के बीच लंगड़ा चुटकुले की बाढ़ के लिए भी दरवाजा खोला है ... "इसे करें ... 'OrElse' ..." – corsiKa

उत्तर

20

उनका मूल्यांकन बाएं से दाएं, गारंटीकृत किया जाएगा। तो हाँ, यह सुरक्षित है।

सशर्त-OR ऑपरेटर (||) अपने bool ऑपरेंड के एक तार्किक-या करता है, लेकिन यदि आवश्यक हो तो केवल अपने दूसरे संकार्य मूल्यांकन करता है।

http://msdn.microsoft.com/en-us/library/6373h346%28VS.71%29.aspx

+0

बढ़िया, धन्यवाद –

+7

एकमात्र चेतावनी होगी कि अगर वहां है एक धागा जो संभवतः बाएं और दाएं मूल्यांकन के निष्पादन के बीच, गैर-शून्य से शून्य तक ऑब्जेक्ट का मान बदल सकता है। यह एक दुर्लभ, अभी तक संभव, मुद्दा होगा। – umbyersw

+1

अच्छा, अभिव्यक्ति मूल्यांकन आदेश के मामले में यह सुरक्षित है। हालांकि, यह थ्रेड सुरक्षित नहीं है यदि एकाधिक धागे obj चर – Mahol25

1

कि पूरी तरह से करने के लिए सुरक्षित है। यदि बाईं ओर पहली अभिव्यक्ति सत्य है, तो बाकी का मूल्यांकन नहीं किया जाता है।

+0

बाईं तरफ, आपका मतलब है। –

+0

मेरा मानना ​​है कि आपका जवाब सही होगा अगर यह पढ़ता है: "... * बाएं * * सत्य * है ..." – umbyersw

+2

;) धन्यवाद, शायद मुझे कुछ "बाएं हाथ, दाएं हाथ" दस्ताने। और मेरी आँखों का परीक्षण भी करना चाहिए ताकि मैं नहीं देखूं || जैसा && – DavidGouge

1

यह वास्तव में सुरक्षित है। || और && (जो निश्चित रूप से विपरीत है, झूठी के लिए शॉर्ट सर्किटिंग) के लिए सी # दस्तावेज़ देखें।

(के बारे में "एक्स || वाई")

अगर एक्स सच है, वाई मूल्यांकन नहीं किया जाता है (क्योंकि या आपरेशन के परिणाम चाहे जो भी y के मूल्य हो सकता है सच है)। इसे "शॉर्ट-सर्किट" मूल्यांकन के रूप में जाना जाता है।

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

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