2011-01-25 51 views
0

我想比較兩個字符串,其中之一可能是null字符串,我正在使用C#的StringComparison.InvariantCultureIgnoreCase功能。當遇到null字符串時,會在運行時引發異常。我應該怎麼做才能比較即使null字符串?c#中的字符串比較#

+0

你可以先檢查它們是否都是空的String.IsNullOrEmpty – Pabuc 2011-01-25 13:13:27

+0

你正在執行什麼樣的比較?平等還是訂購? – 2011-01-25 13:14:40

+0

等於比較 – Vasanth 2011-01-25 13:25:34

回答

3

還有期權已經給你了,你可以考慮使用StringComparer.InvariantCultureIgnoreCase代替。 StringComparer處理空值,而不拋出異常:

using System; 

class Test 
{ 
    static void Main() 
    { 
     StringComparer comparer = StringComparer.InvariantCultureIgnoreCase; 
     Console.WriteLine(comparer.Compare("a", "A")); 
     Console.WriteLine(comparer.Compare("a", null)); 
     Console.WriteLine(comparer.Compare(null, "A")); 
    } 
} 
0

您可以使用

if (String.IsNullOrEmpty(yourString)) { // If true... }

3

使用使用此的

string.Compare(s1, s2, StringComparison.InvariantCultureIgnoreCase); 

好處是,它會返回0(等於)兩個字符串是否null - 這是預期的結果。

0

當字符串爲空時,您想要發生什麼情況。

你可能只是回落到空字符串是這樣的:(str ?? "").Compare(...)

0

這從一個職位,我記得@喬恩飛碟雙向回答一個問題有關比較:

string myCompareString = "compare me"; 

if(myCompareString.Equals(myOtherMaybeNullString, StringComparison.InvariantCultureIgnoreCase)) 
{ 
    // blah blah 
} 

反對的原因你知道的字符串比較不爲空的字符串那可能是空的(除非你比較2個可能的空字符串)。

0

正如一個額外的選項String.Equals處理空,所以你也可以使用:

使用系統;

class Test 
{ 
    static void Main() 
    { 
      var a = String.Equals("test", "Test", StringComparison.InvariantCultureIgnoreCase); 
      var b = String.Equals("test", null, StringComparison.InvariantCultureIgnoreCase); 
      var c = String.Equals(null, "Test", StringComparison.InvariantCultureIgnoreCase); 
      var d = String.Equals(null, null, StringComparison.InvariantCultureIgnoreCase); 
    } 
}