2011-01-25 2 views
0

Я хочу сравнить две строки, и одна из них может быть строкой null, используя StringComparison.InvariantCultureIgnoreCase функцию C#. Это создает исключение во время выполнения, когда встречается строка null. Что мне делать, чтобы сравнить даже строки null?сравнение строк в C#

+0

Вы можете проверить, если они пусты сначала с String.IsNullOrEmpty – Pabuc

+0

Какие сравнения вы исполняющей? Равенство или заказ? –

+0

равенство – Vasanth

ответ

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

Является ли string.Compare в примере Aliostads ниже эквивалентным использованию StringComparer? –

+0

@ Фредрик: Я не знаю, если честно. Надеюсь, это так, но вполне могут быть тонкости ... –

0

Вы можете использовать

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

3

Используйте

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

преимущество использования этого является то, что он будет возвращать 0 (равны), если две строки null - что ожидаемый результат.

0

Опирается на то, что вы хотите, когда строка равна null.

Вы можете просто упасть обратно в пустую строку, как это: (str ?? "").Compare(...)

+0

Так что «null» равно «»? –

0

это с поста я помню @ Джон тарелочкам, отвечая на вопрос о сравнении:

string myCompareString = "compare me"; 

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

Вызывает сравнение с строки вы знаете, не равно нулю в строку это может быть null (если вы не сравниваете 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); 
    } 
}