Подтвердить что ты не робот

Сбой сравнения строк С#

Мое приложение не работает при сравнении строк. Я поставил точку останова, а затем использовал промежуточное окно Visual Studio и выполнил следующий эксперимент

subject

"<#MethodResourceObjectives​>"

subject.Contains("<#Method")

true

subject.Contains("<#MethodResource")

true

subject.Contains("<#MethodResourceObjectives")

true

subject.Contains("<#MethodResourceObjectives>")

false

Казалось бы, это невозможно, кто-нибудь понял, что может произойти?

4b9b3361

Ответ 1

Похоже, что между символами "s" и ">" может быть непечатаемый символ.

Я обычно использую что-то вроде этого, чтобы показать истинное содержимое строки:

for (int i = 0; i < text.Length; i++)
{
    Console.WriteLine("{0:x4}", (int) text[i]);
}

Конечно, это не так удобно из ближайшего окна :(

На самом деле, просто скопировав и вставив свой текст в мой Unicode Explorer (внизу страницы), похоже, что это действительно проблема - у вас есть U + 200B (пробел нулевой ширины) перед >. Вам нужно понять, откуда это исходит.

Ответ 2

Выполняя копию/вставку текста, я могу подтвердить то же поведение.

Вывод:

"<#MethodResourceObjectives>".ToCharArray()
{char[27]}
    [0]: 60 '<'
    [1]: 35 '#'
    [2]: 77 'M'
    [3]: 101 'e'
    [4]: 116 't'
    [5]: 104 'h'
    [6]: 111 'o'
    [7]: 100 'd'
    [8]: 82 'R'
    [9]: 101 'e'
    [10]: 115 's'
    [11]: 111 'o'
    [12]: 117 'u'
    [13]: 114 'r'
    [14]: 99 'c'
    [15]: 101 'e'
    [16]: 79 'O'
    [17]: 98 'b'
    [18]: 106 'j'
    [19]: 101 'e'
    [20]: 99 'c'
    [21]: 116 't'
    [22]: 105 'i'
    [23]: 118 'v'
    [24]: 101 'e'
    [25]: 115 's'
    [26]: 62 '>'

Тогда

subject.ToCharArray()
{char[28]}
    [0]: 60 '<'
    [1]: 35 '#'
    [2]: 77 'M'
    [3]: 101 'e'
    [4]: 116 't'
    [5]: 104 'h'
    [6]: 111 'o'
    [7]: 100 'd'
    [8]: 82 'R'
    [9]: 101 'e'
    [10]: 115 's'
    [11]: 111 'o'
    [12]: 117 'u'
    [13]: 114 'r'
    [14]: 99 'c'
    [15]: 101 'e'
    [16]: 79 'O'
    [17]: 98 'b'
    [18]: 106 'j'
    [19]: 101 'e'
    [20]: 99 'c'
    [21]: 116 't'
    [22]: 105 'i'
    [23]: 118 'v'
    [24]: 101 'e'
    [25]: 115 's'
    [26]: 8203 '​'  <--------- input string contains 'garbage'
    [27]: 62 '>'