2011-12-18 17 views
11

मुझे क्लाइंट से जेसन के रूप में कुछ डेटा प्राप्त हो रहा है। जब मैं .Trim() विधि फोन.Trim() जब स्ट्रिंग खाली या शून्य है

string TheText; // or whould it be better string TheText = ""; ? 
TheText = ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim()); 

इस कोड को दुर्घटना चर कि json से पार्स किया जा रहा है वापस खाली आता है, करता है: मैं इस लिख रहा हूँ?

धन्यवाद।

+2

खैर beblow के रूप में इस कोड का उपयोग कर सकते हैं, यह अगर यह शून्य है दुर्घटना होगा। .. – BoltClock

+19

(myValue ?? "")। टिम() हमेशा काम करेगा। – Larry

+8

सी # 6.0 के साथ अब हम नल-सशर्त ऑपरेटर का उपयोग कर सकते हैं, जैसे टेक्स्ट? ट्रिम() – Santosh

उत्तर

17

हैं, तो Trim कुछ भी नहीं होगा।

यदि धारावाहिक null लौटाता है, तो आपको पर Trim पर कॉल पर मिलेगा।

आपका कोड बेहतर लिखा जाएगा (आरंभीकरण का संबंध है जहाँ तक) इस तरह:

string theText = 
      ((serializer.ConvertToType<string>(dictionary["TheText"])).Trim()); 

वहाँ घोषित करने और चर आरंभ और उससे तत्काल बताए का कोई मतलब नहीं है।

निम्नलिखित सबसे सुरक्षित हो सकता है, यदि आप नहीं जानते कि serializer वापस कर सकती है:

string theText = ((serializer.ConvertToType<string>(dictionary["TheText"]))); 

if(!string.IsNullOrEmpty(theText)) 
{ 
    theText = theText.Trim(); 
} 
+1

ठीक है, जो अधिक स्पष्टता के लिए बनाता है। – frenchie

+0

यदि आपको खेतों के भार को ट्रिम करना है, तो यह दर्द है, क्या स्ट्रिंग शून्य होने पर परेशान नहीं होने के लिए ट्रिम विधि को विस्तारित करने का कोई तरीका नहीं है? – JsonStatham

+1

@ चयन चयन - आप हमेशा एक विस्तार विधि लिख सकते हैं जो वास्तव में करता है। – Oded

2

सबसे पहले, नहीं, यह नहीं बेहतर "" को TheText प्रारंभ करने में किया जाएगा। आप इसे बाद में सौंप रहे हैं। (और यदि आप कभी भी एक खाली स्ट्रिंग उपयोग करने की आवश्यकता है, string.Empty बजाय का उपयोग यह आमतौर पर स्पष्ट है और सिर्फ आम तौर पर बेहतर अभ्यास है।।)

दूसरे, नहीं, यह दुर्घटना नहीं होगा - Trim() काम करता है ठीक एक खाली स्ट्रिंग पर । यदि "खाली" से आपका मतलब है कि यह null हो सकता है, तो हाँ, यह क्रैश हो जाएगा; शायद आप ठीक कर सकता है अशक्त-सम्मिलित ऑपरेटर का उपयोग करके: serializer एक खाली स्ट्रिंग रिटर्न

string TheText = (serializer.ConvertToType<string>(dictionary["TheText"]) ?? string.Empty).Trim(); 
+3

मुझे नहीं लगता कि सार्वभौमिक समझौता है कि 'string.Empty' '' से बेहतर है। मैं एक के लिए '' '''' पसंद करता हूं। – CodesInChaos

+0

@CodeInChaos: नहीं, सार्वभौमिक समझौता नहीं है। यह ज्यादातर राय है, लेकिन [दक्षता तर्क] (http://stackoverflow.com/questions/5650164/why-string-empty-is-more-recommended-than) के लिए कुछ योग्यता हो सकती है। लेकिन यह सिर्फ एक सुझाव था। – Ryan

+2

मुझे यकीन है कि .net 4 के रूप में दक्षता तर्क में कोई योग्यता नहीं है। मेरे परीक्षणों से पता चला है कि '" "और' string.Empty' एक ही उदाहरण को इंगित करते हैं, और वह उदाहरण AppDomains में साझा किया जाता है। एनजीएन का उपयोग करते समय एक अंतर हो सकता है, लेकिन कम से कम सामान्य कार्यक्रमों के लिए मुझे उन दोनों के बीच कोई तकनीकी अंतर नहीं मिला। – CodesInChaos

10

कोई रिक्त स्ट्रिंग पर Trim() कॉलिंग एक खाली स्ट्रिंग का परिणाम देगा।null पर Trim() कॉलिंग NullReferenceException

+0

'string.IsNullOrEmptyOrBlank' की जांच करने का सबसे साफ तरीका क्या है? – Coops

+0

@ कोडबेंड: खाली से आपका क्या मतलब है? –

+2

आहा - [स्ट्रिंग.इएस नूलऑरहाइटस्पेस] (http://msdn.microsoft.com/en-us/library/system.string.isnullorwhitespace.aspx) – Coops

9

फेंक देते हैं आप उन रिकॉर्ड कुछ क्षेत्रों में nulls है, तो एक त्वरित विस्तार विधि लेखन सबसे आसान तरीका हो जाएगा के लिए आप ट्रिम करना चाहते हैं कुछ क्षेत्रों, लेकिन अपने हो रही अपवाद है:

उपयोग की
public static class ExtensionMethods 
    { 
     public static string TrimIfNotNull(this string value) 
     { 
      if (value != null) 
      { 
       return value.Trim(); 
      } 
      return null; 
     } 
    } 

नमूना उदाहरण:

string concatenated = String.Format("{0} {1} {2}", myObject.fieldOne.TrimIfNotNull(), myObject.fieldTwo.TrimIfNotNull(), myObject.fieldThree.TrimIfNotNull()); 
2

के रूप में कुछ टिप्पणियों में सुझाव दिया, अब आप ग # 6 अशक्त-सशर्त ऑपरेटरों इस वाक्य के साथ उपयोग कर सकते हैं:

string TheText = (serializer.ConvertToType<string>(dictionary["TheText"]))?.Trim(); 

प्रलेखन: https://msdn.microsoft.com/en-us/library/dn986595.aspx

5

आप एल्विस ऑपरेटर का उपयोग कर सकते हैं:

GetNullableString()?.Trim(); // returns NULL or trimmed string 
+0

https://en.wikipedia.org/wiki/Elvis_operator उन लोगों के लिए अनजान एल्विस के अर्थ का? –

0

आप

string theText = (((serializer.ConvertToType<string>(dictionary["TheText"])))+ string.Empty).Trim(); 
संबंधित मुद्दे