2013-03-01 13 views
5

जैसा कि मैं समझता हूं और पढ़ता हूं, यदि आप दूसरी स्थिति के लिए आग लगने के लिए यदि कथन (& & या ||) में शॉर्ट सर्किटिंग का उपयोग कर सकते हैं। और यदि आप दोनों हालत को आग लगाना चाहते हैं तो आप एकल ऑपरेंड (& या |) का उपयोग करेंगे।इनलाइन अगर कथन - शॉर्ट सर्किटिंग

तो कहते हैं कि अगर मैं इनलाइन अगर नीचे के रूप में बयान किया है:

var test = (MyObject != null || string.IsNullOrEmpty(MyObject.Property)) ? string.Empty : MyObject.Property; 

यह object reference त्रुटि फेंक देंगे अगर MyObject रिक्त है, जो मेरी राय में नहीं के रूप में मैं कम सर्किटिंग उपयोग कर रहा हूँ चाहिए। क्या कोई इसे समझा सकता है।

+3

आप ' '?' से पहले एक समापन कोष्ठक याद कर रहे हैं। – Corak

+0

@ कोर्क हां अंतिम ब्रैकेट याद किया ...अब संपादित किया गया – Zaki

उत्तर

13

आप गलत स्थिति का उपयोग कर रहे हैं। यह हिस्सा:

MyObject != null || string.IsNullOrEmpty(MyObject.Property) 

होना चाहिए:

MyObject == null || string.IsNullOrEmpty(MyObject.Property) 

एक || की आरएचएस केवल कार्यान्वित करता है, तो बाएं हाथ झूठी है। आप इसे केवल निष्पादित करना चाहते हैं यदि MyObject शून्य है।

संपादित करें: बहुत हालांकि

var test = MyObject != null && !string.IsNullOrEmpty(MyObject.Property) 
     ? MyObject.Property : ""; 

नोट 2 और सशर्त ऑपरेटर 3 ऑपरेंड के उत्क्रमण: तुम सच में MyObject != null हिस्सा चाहते हैं, आप के लिए पूरी बात बदल सकता है।

+0

आह मैं देखता हूं अगर मैं & quot; के बजाय उसी स्थिति के लिए करता हूं यह ठीक होना चाहिए – Zaki

+0

@ सैम 1: ठीक है आपको इसके अन्य बिट्स को भी उलटना होगा। –

+0

धन्यवाद अब यह स्पष्ट है: पी – Zaki

3

आप एक == नहीं एक होना चाहिए =

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property) ? string.Empty : MyObject.Property 
2

इस प्रयास करें:

var test = (MyObject == null || string.IsNullOrEmpty(MyObject.Property) 
      ? string.Empty : MyObject.Property 
2
MyObject != null || string.IsNullOrEmpty(MyObject.Property) 

यहाँ आप का कहना है।

यदि मेरी वस्तु शून्य नहीं है। या string.IsNullOrEmpty (MyObject.Property)

कि अगर MyObject रिक्त है वह दूसरे भाग पर अमल करने की कोशिश करेंगे जिसका मतलब है।

MyObject == null || string.IsNullOrEmpty(MyObject.Property) 

इस अशक्त अपवाद

2

होता है ऐसा इसलिए है क्योंकि MyObjectnull है और इसलिए पहली शर्त false तो दूसरे भाग हालत के पूरे पता करने के लिए मूल्यांकन किया जाना चाहिए है फेंक नहीं होंगे। यह करने के लिए लाइन में परिवर्तित करें:

MyObject != null && string.IsNullOrEmpty(MyObject.Property) 
1

आप के बजाय पठनीयता लाइन गिनती, जैसे पसंद करते हैं चाहिए:

string prop = string.Empty; 
if(MyObject != null && MyObject.Property != null) 
    prop = MyObject.Property; 

(अपने अपवाद के लिए कारण पहले से ही अन्य उत्तर में विस्तार से बताया गया था)

+0

रेखा गणना हमेशा लक्ष्य नहीं है। उदाहरण के लिए, एक लामा/भविष्यवाणी के भीतर, '{' & '}' के उपयोग को मजबूर करना और एक स्पष्ट वापसी भी उतना ही अपठनीय हो सकता है। – JoeBrockhaus

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