String.Starts с не работает как я ожидаю - PullRequest
1 голос
/ 27 сентября 2011
string word1 = ""; //see example   
string word2 = "";    
bool b1 = word1.StartsWith(word2);
bool b2 = word1.Substring(0, word2.Length) == word2;

для некоторых арабских строк b1 не равно b2?Не могли бы вы объяснить это поведение?

Пример:

word1 = ((char)0x0650).ToString()+ ((char)0x0652).ToString()+ ((char)0x064e).ToString();
word2 = ((char)0x0650).ToString()+ ((char)0x0652).ToString();

1 Ответ

7 голосов
/ 27 сентября 2011

Существует разница: .StartsWith выполняет сравнение с учетом культуры, в то время как .Equals (то, что вы используете с ==) - нет.

Итакесли у вас есть две строки, которые отличаются, когда вы сравниваете их посимвольно (== возвращает ложь), но в вашей культуре они считаются равными (начальная строка возвращает истину), вы можете получить этот результат.

РЕДАКТИРОВАТЬ Если я попробую ваш пример значений с этим:

bool b1 = word1.StartsWith(word2, StringComparison.Ordinal);
bool b2 = word1.Substring(0, word2.Length).Equals(word2, StringComparison.Ordinal);

оба возвращают "True".

...