2009-11-02 15 views
14

मैं अपने कोड में यह है:खाली स्ट्रिंग अगर शून्य

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString()) 

यह एक त्रुटि जब यह शून्य रिटर्न देता है, मैं अगर यह रिक्त है यह CustomerID कोई रिक्त स्ट्रिंग है कैसे कर सकते हैं?

/एम

+1

'ग्राहक आईडी 'शून्य मान है, या' ग्राहक 'स्वयं शून्य है? साथ ही, 'ग्राहक आईडी' का प्रकार क्या है? – Thorarin

उत्तर

36

(के लिए सी # 6.0 अद्यतन)

आप सी # 6 या नए (विजुअल स्टूडियो 2015 या नए) का उपयोग कर रहे हैं, तो आप इस null-conditional operator ?. का उपयोग कर प्राप्त कर सकते हैं:

शून्य-सशर्त ऑपरेटर की एक उपयोगी संपत्ति यह है कि यदि आप परीक्षण करना चाहते हैं तो यह भी "जंजीर" हो सकता है यदि कई नेस्टेड गुण शून्य हैं:

// ensure (a != null) && (b != null) && (c != null) before invoking 
// a.b.c.CustomerId, otherwise return "" (short circuited at first encountered null) 
var customerId = a?.b?.c?.CustomerId.ToString() ?? ""; 

से पहले 6.0 (VS2013 या पुराने) सी # संस्करणों, आप इसे इस प्रकार सम्मिलित कर सकता है के लिए: यदि वस्तु में गैर-शून्य है इससे पहले कि आप अपने सदस्यों तक पहुँचने का प्रयास

string customerId = cu.Customer != null ? cu.Customer.CustomerID.ToString() : ""; 

आप की जाँच , और अन्यथा एक खाली स्ट्रिंग वापस।

इसके अलावा, ऐसी स्थितियां हैं जहां null object पैटर्न उपयोगी है। इसका मतलब यह होगा कि आप सुनिश्चित करते हैं कि Customer की मूल श्रेणी (इस मामले में cu का प्रकार) हमेशा किसी ऑब्जेक्ट का वास्तविक उदाहरण लौटाता है, भले ही यह "खाली" हो। उदाहरण के लिए इस लिंक को देखें, अगर आपको लगता है कि यह आपकी समस्या पर लागू हो सकता है: How do I create a Null Object in C#

0
SelectList(blah, "blah", "blah", 
(cu.Customer.CustomerID!=null?cu.Customer.CustomerID.ToString():"") 
) 
16

यह CustomerID के प्रकार पर निर्भर करता है।

तो CustomerID एक स्ट्रिंग तो आप null coalescing operator का उपयोग कर सकते है:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID ?? string.Empty) 

तो CustomerID एक Nullable<T> है, तो आप उपयोग कर सकते हैं:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString()) 

यह काम करेंगे क्योंकि Nullable<T> की ToString() विधि उदाहरण null (तकनीकी रूप से HasValue संपत्ति false) है तो एक खाली स्ट्रिंग देता है।

0

कृपया उत्पादन में इस का उपयोग न करें:

/// <summary> 
/// I most certainly don't recommend using this in production but when one can abuse delegates, one should :) 
/// </summary> 
public static class DirtyHelpers 
{ 
    public static TVal SafeGet<THolder, TVal>(this THolder holder, Func<TVal> extract) where THolder : class 
    { 
     return null == holder ? default(TVal) : extract(); 
    } 

    public static void Sample(String name) 
    { 
     int len = name.SafeGet(()=> name.Length); 
    } 
} 
13

त्रिगुट ऑपरेटर काम करता है, लेकिन अगर आप भी कम मनमाने ढंग से वस्तुओं पर काम कर अभिव्यक्ति चाहते हैं आप का उपयोग कर सकते हैं:

(myObject ?? "").ToString() 

यहाँ वास्तविक है मेरे कोड से जीवन उदाहरण:

private HtmlTableCell CreateTableCell(object cellContents) 
{ 
    return new HtmlTableCell() 
    { 
     InnerText = (cellContents ?? "").ToString()    
    }; 
} 
संबंधित मुद्दे