Недавно мы обновили все наши проекты с .NET 3.5 до .NET 4. Я столкнулся с довольно странной проблемой в отношении string.IndexOf()
.
Мой код явно делает что-то немного другое, но в процессе изучения проблемы я обнаружил, что вызов IndexOf()
в строке с самим собой возвратил 1 вместо 0.
Другими словами:
string text = "\xAD\x2D"; // problem happens with "-dely N.China", too;
int index = text.IndexOf(text); // see update note below.
Дал мне индекс 1, а не 0. Несколько вещей, чтобы отметить эту проблему:
-
Проблемы, связанные с этими дефисами (первый символ - мягкий дефис Юникода, второй - обычный дефис).
-
Я проверил дважды, это не происходит в .NET 3.5, но в .NET 4.
-
Изменение
IndexOf()
для сравнения по порядку устраняет проблему, поэтому по какой-то причине первый символ игнорируется по умолчаниюIndexOf
.
Кто-нибудь знает, почему это происходит?
ИЗМЕНИТЬ
Извините, ребята, немного набросились на оригинальный пост и дважды нашли скрытую черту. Я обновил строку, это должно возвращать индекс 1 вместо 2, если вы вставляете его в правильный редактор.
Update:
Изменена исходная строка проблемы на ту, где каждый фактический символ хорошо виден (с помощью экранирования). Это немного упрощает вопрос.