2011-01-18 7 views
26

त्वरित सवाल है, जिनमें से सबसे तेज और सबसे आसान जवाब अच्छी तरह से संबंधित कोड को पुनर्व्यवस्थित, लेकिन आइए देखते हैं कि करने के लिए हो सकता है ...VB.NET 'अगर' के साथ बयान 'या' सशर्त दोनों पक्षों का मूल्यांकन किया गया है?

तो मैं एक If बयान (कोड का एक टुकड़ा जो एक पूर्ण काम कर समाधान का एक हिस्सा है है सी # में लिखा गया) VB.NET का उपयोग करके पुनः लिखा गया। मैं भी अवगत VB.NET IIf(a, b, c) विधि का मूल्यांकन करता है दोनों b और पहले मूल्यांकन के सच्चाई की परवाह किए बिना a हूँ, लेकिन इस मेरी मानक निर्माण में मामला प्रतीत हो रहा है,:

If (example Is Nothing Or example.Item IsNot compare.Item) Then 
    'Proceed 
End If 

या, बल्कि, अधिक उचित:

If (example Is Nothing Or Not example.Item = compare.Item) Then 
    'Proceed 
End If 

यहाँ, यदि exampleNothing (null) है तो मैं अभी भी एक NullReferenceException - यह मेरी गलती है, या यह कुछ वीबी की लहर में मैं सिर्फ सहना है नेट?

+13

सभी मामलों का उपयोग करना चाहिए 'के 99,9% में 'या' और 'और' के बजाय OrElse' और 'AndAlso'। –

उत्तर

51

यह तो यह व्यवहार है आप की उम्मीद करनी चाहिए, है कि कैसे Or परिभाषित किया गया है कि में अपने "गलती" है:

एक बूलियन इसकी तुलना में, या ऑपरेटर हमेशा दोनों अभिव्यक्तियों का मूल्यांकन करता है, जिसमें प्रक्रिया कॉलिंग शामिल हो सकती है। OrElse ऑपरेटर (विजुअल बेसिक) शॉर्ट सर्किटिंग करता है, जिसका अर्थ है कि अगर अभिव्यक्ति 1 सही है, तो अभिव्यक्ति 2 का मूल्यांकन नहीं किया जाता है।

लेकिन आप इसे सहन करने की जरूरत नहीं है। शॉर्ट-सर्किटिंग व्यवहार प्राप्त करने के लिए आप OrElse का उपयोग कर सकते हैं।

तो आप शायद चाहते हैं:

If (example Is Nothing OrElse Not example.Item = compare.Item) Then 
    'Proceed 
End If 

मैं यह नहीं कह सकते कि यह पढ़ता बहुत अच्छी तरह से है, लेकिन यह काम करना चाहिए ...

+8

बहुत बढ़िया, जॉन, मैं वीबी के पूरे वर्बोज़ और बदसूरत होने के लिए लगता है; उम्मीद है कि यह एक बार लिखने के लिए एक बार (फिर से) चीज है। –

+4

यह वर्बोज़ हो सकता है लेकिन बदसूरत स्वाद का विषय है। Verbose भी पठनीय मतलब हो सकता है, मुझे लगता है कि यह केवल उपयोग करने का मामला है। जब इस भाषा की तुलना में –

+0

@Tim यूक्लिड के तत्वों के लिए एक आसान पढ़ा है, इससे भी ज्यादा। –

22

OrElse की शॉर्ट सर्किट बराबर है Or

+0

धन्यवाद - अच्छा एन 'जल्दी! ;) –

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