2011-03-24 14 views

उत्तर

11

की तरह कुछ के साथ निम्नलिखित कोड

if (customer.Person!=null) 
Console.WriteLine(customer.Person.Name); 

स्थान लेते हैं आप कर सकते हैं नहीं, मुझे डर लग रहा - वहाँ ग्रूवी के null- की तरह कुछ भी नहीं है सुरक्षित डेरफ़्रेंसिंग ऑपरेटर :(

मुझे लगता है कि आप व्यक्ति के लिए "शून्य वस्तु" बना सकते हैं - यानी वास्तविक उदाहरण, लेकिन सभी गुणों के साथ शून्य। फिर आप इसका उपयोग कर सकते हैं:

Console.WriteLine((customer.Person ?? Person.Null).Name ?? "Unknown"); 

... लेकिन यह बहुत भयानक है। (यह भी customer अशक्त होने के लिए जाँच नहीं है।)

एक अन्य विकल्प व्यक्ति पर एक विस्तार विधि लिखने के लिए होगा:

public static string NameOrDefault(this Person person, string defaultName) 
{ 
    return person == null ? defaultName : person.Name ?? defaultName; 
} 

तब:

Console.WriteLine(customer.Person.NameOrDefault("Unknown"); 
+0

"Person.Null" का क्या अर्थ है? – Alexandre

+0

@Alex: यह व्यक्ति वर्ग में एक स्थिर संपत्ति होगी, विशेष "शून्य वस्तु" व्यक्ति संदर्भ को वापस कर देगा, जिसमें इसकी सभी संपत्तियां शून्य हैं। –

+0

@Alex: यह एक स्थिर संपत्ति है जो "कोई व्यक्ति" का प्रतिनिधित्व करने वाले व्यक्ति का उदाहरण लौटाती है। यह [शून्य ऑब्जेक्ट पैटर्न] है (http://en.wikipedia.org/wiki/Null_Object_pattern)। – Richard

5

आप इस्तेमाल कर सकते हैं ternary operator:

Console.WriteLine(customer.Person != null ? customer.Person.Name : "unknown"); 

सबसे अच्छा दिखने वाला कोड नहीं है, लेकिन फिर भी एक लाइनर


संपादित करें: IsNullOrWhiteSpace उपयोग करने के लिए, इस मामले में अपने आवेदन तर्क व्यवहार करता है & अशक्त एक ही तार खाली मत भूलना।

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