2012-12-26 7 views
5

मैं मामलों के बहुत सारे भर में चल रहा हूँ जहाँ मैंघोंसला वाले गुणों के साथ "ऑब्जेक्ट रेफरेंस ऑब्जेक्ट के उदाहरण पर सेट नहीं है" को अनदेखा करने का सबसे अच्छा तरीका क्या है?

@ev.Event.Instructor.Name 

की तर्ज लेकिन प्रशिक्षक संपत्ति के साथ कुछ प्रदर्शित करना चाहते हैं अशक्त होने की अनुमति दी है। उन मामलों में "ऑब्जेक्ट संदर्भ किसी ऑब्जेक्ट के उदाहरण पर सेट नहीं है।" त्रुटि फेंक दी गई है, लेकिन मैं इसे अनदेखा करना चाहता हूं और कुछ भी वापस नहीं आया ..

क्या शून्य के लिए जांच करने के लिए जगह पर बहुत सारे टर्नरी अभिव्यक्तियों को बनाने के लिए इसे संभालने का एक बेहतर तरीका है?

बराबर php अभिव्यक्ति होगा

@$ev.Event.Instructor.Name 

मैं MVC और बराबर Eval बयान के कुछ webforms विचारों का अनुवाद किया गया है अशक्त संदर्भ त्रुटियों को अनदेखा करेगा।

स्पष्ट करने के लिए: @ev संपत्ति एक LINQ क्वेरी से आ रही है और वहाँ भी मामले हैं, जहां मैं

@ev.mainContact.FirstName @ev.mainContact.LastName 
@ev.mainContact.Company.Name 

है कहाँ न केवल mainContact अशक्त हो सकता है लेकिन mainContact की कंपनी भी अशक्त हो सकते हैं। यह शून्य के लिए एक टर्नरी जांच के साथ हर एक विशेषता का चयन करने के लिए एक समान रूप से खराब समाधान की तरह लगता है।

उत्तर

0

एक और दृष्टिकोण मैं जिनमें से यह है बुरा की एक बहस का मुद्दा राशि है:

@{try{@ev.Event.Instructor.Name}catch{}} 

मैं बजाय 18 या तो अतिरिक्त गुण जोड़ने के इस दृष्टिकोण का उपयोग करने का निर्णय लिया सभी को टर्नरी अभिव्यक्तियों के साथ चयन करें।

+1

क्या आपने प्रदर्शन हिट माना है? पृष्ठ को प्रस्तुत करते समय अपवाद (बहुत सारे) अपवाद एक अच्छा विचार की तरह नहीं लगते हैं। –

+0

मुझे इस दृष्टिकोण के साथ कोई प्रदर्शन समस्या नहीं है। मैंने इसके बारे में कुछ अन्य SO प्रश्नों को देखा (http://stackoverflow.com/questions/161942/how-slow-are-net-exceptions) और ऐसा लगता है कि वे बहुत तेज़ हैं, 118 अपवाद प्रति मिलीसेकंड हैं। – DShook

-1

कुछ की तरह:

@$ev.Event.Instructor != null ? @$ev.Event.Instructor.Name : String.Empty 
+0

ओपी ने विशेष रूप से टर्नरी अभिव्यक्तियों के अलावा कुछ और मांगे। –

0

आप निर्माता में अपनी वस्तुओं का दृष्टांत ताकि आप अशक्त वस्तुओं से बचना चाहिए, उदाहरण के लिए:

public class Event{ 
    public Event(){ 
      Instructor = new Instructor(); 
    } 
} 
4

एक तरह से घटना के लिए एक और संपत्ति को जोड़ने के लिए है:

public string InstructorName 
{ 
    get { return Instructor == null ? string.Empty : Instructor.Name; } 
} 
3

"अपवाद को अनदेखा" जैसी कोई चीज़ नहीं है। आपको अपवाद नहीं करना चाहिए या उन्हें संभालना चाहिए।

public class Event { 
    public Event() { 
      this.Instructor = new Instructor(); 
    } 
} 

या

@(ev.Event.Instructor == null ? String.Empty : ev.Event.Instructor.Name) 
संबंधित मुद्दे

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