Данный код возвращает 0, хотя по документации должен возвращать -1. Я что-то не правильно делаю? Версия .NET - 4.7.1.
Console.WriteLine("Dddd".IndexOf("⚽️", 0));
Также вспоминается такой неочевидный "баг". И такой, буквально на днях на хабре опять мелькнуло. В общем, строки — это не так просто, а когда дело доходит до обработки тонкостей юникода это становится ещё сложнее.
Вообще, Джон Скит писал, что некоторые юникодные символы ломают .IndexOf
.
Смотри его ссылку на рекомендации по обработке строк.
Если вам нужно, чтобы работало в соответствии с рекомендациями, то необходимо указывать культуру строки.
Вообще, у вас в строке два символа. Один — это собственно то, что мы видим глазом:
⚽ e2 9a bd
А вот второй — невидимый, но если вы выделите его в Linqpad, то видно будет что есть ещё один:
(Можете проверить — любого из них достаточно, чтобы сломать IndexOf)
Ещё лучше видно через специализируемые инструменты, наподобие такого.
Это признак комбинирования символа через Variation Selectors, почти такой же как и комбинируемые символамы
Пример использования можете посмотреть в вопросе про текст Zalgo.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Есть цель создать приложение, под heart rate monitor, который работает по BLEВ идеале хочу написать на C#
Споткнулся на обновлении DataGrid при добавлении элемента в ObservableCollectionЕсть некий класс Material:
В списке находятся превьюшки с подписямиПодписи должны выравниваться по нижнему, а превьюшки по верхнему краю своего контейнера