2012-03-14 11 views
5

मैं पहली पंक्ति निकालना चाहते हैं:string.IsNullOrEmpty ट्रिम का उपयोग कर()

    !string.IsNullOrEmpty(cell.Text) 

इस किसी भी मुद्दे का कारण होगा?

मैं कुछ कोड में यह भर में भाग गया:

   if ((id % 2 == 0) 
        && !string.IsNullOrEmpty(cell.Text) 
        && !string.IsNullOrEmpty(cell.Text.Trim()) 
        ) 

मुझे लगता है कि पहले string.IsNullOrEmpty रिक्त स्थान
साथ एक स्ट्रिंग और ट्रिम (साथ लाइन पर झूठी वापसी होगी) कि का ख्याल रखता है, इसलिए पहले IsNullOrEmpty बेकार है

लेकिन इससे पहले कि मैं ट्रिम के बिना लाइन को हटा दूं, मैंने सोचा कि मैं इसे समूह द्वारा चलाऊंगा।

+2

आप string.IsNullOrWhitespace – nothrow

+0

मतलब है कि यह परीक्षण करने के लिए या देखने के लिए बहुत कठिन है

हालांकि, वहाँ एक बेहतर तरीका है आधिकारिक दस्तावेज? (Http://msdn.microsoft.com/en-us/library/system.string.isnullorempty.aspx)। संक्षिप्त उत्तर: नहीं, रिक्त स्थान की एक स्ट्रिंग शून्य या खाली नहीं है। – madth3

+3

आप लोग इस मुद्दे को याद कर रहे हैं। हां, आप 'IsNullOrEmpty' का उपयोग कर सकते हैं, लेकिन ओपी उलझन में है कि' NullReferenceException' से बचने के लिए पहले कॉल की आवश्यकता क्यों है। यह समझना कि एक अलग विधि कॉल पर स्विच करने से कहीं अधिक महत्वपूर्ण है क्योंकि उसे ऐसा करने के लिए कहा गया था। –

उत्तर

4

पहले IsNullOrEmpty शून्य मान पकड़ता इससे पहले कि वे ट्रिम के साथ एक NullReferenceException फेंक() ।

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+2

केवल .NET Framework 4 और बाद में उपलब्ध है। – Chris

12

यदि सेल। टेक्स्ट शून्य है, तो आपको उस पहले चेक के बिना अपवाद होगा।

+3

यदि सेल टेक्स्टबॉक्स है, तो वह संपत्ति कभी भी शून्य नहीं होगी। – code4life

+0

जिसे 'सेल .ext! = Null && cell.Text.Trim()! = "" के साथ भी हासिल किया जा सकता है, यदि आपके पास अभी भी .NET <.NET 4.0 है। –

+0

नोट: सेल एचटीएमएल टेबल सेल सामग्री वेबड्राइवर का उपयोग कर एक्वार्ड किया गया है (लेकिन यह सवाल का मुद्दा नहीं है) –

8

.NET 4.0 में:

if (id % 2 == 0 && !string.IsNullOrWhiteSpace(cell.Text)) 
{ 
    ... 
} 

पुराने संस्करणों में आप दो परीक्षणों रखने क्योंकि अगर आप पहले हटाने और cell.Text रिक्त है, तो आपको .Trim आह्वान करने के लिए कोशिश दूसरे पर एक एनआरई मिल जाएगा चाहिए एक शून्य उदाहरण पर।

या आप भी ऐसा कर सकता है:

if (id % 2 == 0 && string.IsNullOrWhiteSpace((cell.Text ?? string.Empty).Trim())) 
{ 
    ... 
} 

या और भी बेहतर, आप स्ट्रिंग प्रकार है कि यह कर देगा के लिए एक extension method लिख सकता है तो आप बस सकता है कि:

if (id % 2 == 0 && !cell.Text.IsNullOrWhiteSpace()) 
{ 
    ... 
} 

को ढूंढ सकते हैं इस तरह दिखें:

public static class StringExtensions 
{ 
    public static bool IsNullOrWhiteSpace(this string value) 
    { 
     return string.IsNullOrEmpty((value ?? string.Empty).Trim()); 
    } 
} 
+0

मुझे नहीं लगता कि इस स्थिति में एक विस्तार विधि बेहतर है। अंगूठे के नियम के रूप में, "मान्य एक्सटेंशन विधि पैरामीटर के रूप में शून्य को स्वीकार न करें"। अन्य प्रोग्रामर इसका अर्थ यह समझ सकते हैं कि 'टेक्स्ट का मूल्य होना चाहिए क्योंकि एक विधि को बुलाया जा सकता है'। –

0

मुझे विश्वास है कि परीक्षण यह सुनिश्चित करना है कि cell.text शून्य नहीं है सबसे पहले ... यदि ऐसा है, तो इसे बाईपास करने का प्रयास करें और केवल cell.text.trim() को दबाएं क्योंकि आप एक नल स्ट्रिंग पर ट्रिम नहीं कर सकते हैं।

0

क्यों !string.IsNullOrWhitespace(call.Text) का उपयोग नहीं करते हैं और पिछले दो चेक छोड़ते हैं?

0

आप सेल के रूप में केवल पहले IsNullOrEmpty को नहीं हटा सकते हैं। टेक्स्ट शून्य हो सकता है और इस प्रकार ट्रिम को कॉल करना फेंक देगा और अपवाद होगा। यदि आप .NET 4.0 का उपयोग कर रहे हैं या दोनों चेक छोड़ दें तो IsNullOrWhiteSpace का उपयोग करें।

if ((id % 2 == 0) && !string.IsNullOrWhiteSpace(cell.Text)) 
+0

हां, लेकिन यह सवाल का जवाब नहीं देता है। जाहिर है ओपी इस बारे में उलझन में है कि अगर कथन कथन का मूल्यांकन किया जाता है। –

+0

अपडेट किया गया। धन्यवाद। –

0

तो cell.Text रिक्त है, अभिव्यक्ति string.IsNullOrEmpty (cell.Text.Trim()) एक अपवाद के बाद से यह सेल पर विधि ट्रिम() को चलाने के लिए कोशिश कर रहा है फेंक देते हैं।

बहुत अधिक readble अगर हालत होगा:! Cell.Text = अशक्त & & cell.Text.Trim() = ""

0

आप इस तरह विस्तार विधि का उपयोग कर सकते हैं::

/// <summary> 
/// Indicates whether the specified string is null or empty. 
/// This methods internally uses string.IsNullOrEmpty by trimming the string first which string.IsNullOrEmpty doesn't. 
/// .NET's default string.IsNullOrEmpty method return false if a string is just having one blank space. 
/// For such cases this custom IsNullOrEmptyWithTrim method is useful. 
/// </summary> 
/// <returns><c>true</c> if the string is null or empty or just having blank spaces;<c>false</c> otherwise.</returns> 
public static bool IsNullOrEmptyWithTrim(this string value) 
{ 
    bool isEmpty = string.IsNullOrEmpty(value); 
    if (isEmpty) 
    { 
     return true; 
    } 
    return value.Trim().Length == 0; 
} 
संबंधित मुद्दे