Сравнение двух строк в условии if неожиданно возвращает false C # - PullRequest
1 голос
/ 11 октября 2019

Я выполняю нечеткий поиск и хочу убедиться, что программа нашла правильный экземпляр человека.

По этой причине я сравниваю полученное имя "фамилия" с моим ожидаемым именем "фамилия".

Код относительно прост:

string expectedUserName = $"{nameSplit[0].ToLower()} {nameSplit[1].ToLower()}"; // result: "bechtold julian"
string result = O365Api.SearchUser(mail); // result: "bechtold julian"
if (result.Equals(expectedUserName))
{
    // Correct user is found
    // Never enters here
}

для тестирования я также жестко закодировал ожидаемое значение:

userName = "bechtold julian";
mail = "julian.bechtold";
string result = O365Api.SearchUser(mail);
if (result.Equals(userName))
{
    // Correct user is found
    // never enters here
}

результат такой же, когдаиспользуя другой метод сравнения:

if (result == userName)

и здесь значения результата и имени пользователя:
enter image description here
enter image description here

Я что-то упускаю? Может ли строка из Интернета содержать специальные символы, которые не отображаются?

Каковы дальнейшие шаги для решения проблемы?

1 Ответ

2 голосов
/ 11 октября 2019

Визуально неразличимые пробельные символы (пробел, неразрывный пробел) и неразличимые непробельные символы (латинский i и турецкий i, v и w в шведских сопоставлениях) могут иногда вызывать это.

Переключиться на шестнадцатеричное представлениев отладчике, чтобы увидеть фактические значения символов. Обратите внимание на завершающий нулевой байт.

В зависимости от того, что это,

  • напишите вспомогательную функцию для нормализации эмпирически проверенных особых случаев
  • используйте одиниз перегрузок сравнения строк, которые принимают CultureInfo и выбирают культуру, которая нечувствительна к акценту, например)

    if (result.Equals(userName, StringComparison.InvariantCulture))
    {
        /* match */
    }
    
  • Trim() строки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...