2011-01-25 53 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); 
    } 
}