zequion Ответов: 2

Compareinfo.lastindexof проблема с ignoresymbols и символом


Всякий раз, когда "IgnoreSymbols" ищет ":" возврат равен = 5. Почему?

// OK. Returns 3.
int Pos = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.LastIndexOf("AAA:AA", ":", System.Globalization.CompareOptions.IgnoreCase);

// OK. Returns 3.
Pos = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.LastIndexOf("AAA:AA", ":", System.Globalization.CompareOptions.IgnoreNonSpace);

// BAD. Returns 5.
Pos = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.LastIndexOf("AAA:AA", ":", System.Globalization.CompareOptions.IgnoreSymbols);

// OK. Returns 3.
Pos = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.LastIndexOf("AAABAA", "B", System.Globalization.CompareOptions.IgnoreSymbols);

// OK. Returns 3.
Pos = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.LastIndexOf("AAA:AA", ":", System.Globalization.CompareOptions.IgnoreCase | System.Globalization.CompareOptions.IgnoreNonSpace);

// BAD. Returns 5.
Pos = System.Globalization.CultureInfo.CurrentCulture.CompareInfo.LastIndexOf("AAA:AA", ":", System.Globalization.CompareOptions.IgnoreCase | System.Globalization.CompareOptions.IgnoreNonSpace | System.Globalization.CompareOptions.IgnoreSymbols);


Что я уже пробовал:

на всех сайтах компании internet.in все сайты Интернета.

2 Ответов

Рейтинг:
12

Richard Deeming

Документация[^] немного сбивает с толку - перегрузка, которую вы вызываете, просто говорит, что она возвращает индекс символа, если он найден, или -1 иначе.

Однако, глядя на другие перегрузки, они включают в себя дополнительную информацию:
"Вернет startIndex если value это бесславный персонаж."

Глядя на источник перегрузки, которую вы вызываете[^], вы можете видеть, что он просто вызывает другую перегрузку, проходя внутрь source.Length - 1 как то startIndex.

Поскольку значение, которое вы ищете, является игнорируемым символом, метод поэтому возвращает source.Length - 1 - т: 5.

Мне это кажется странным выбором реализации. Я бы ожидал, что он вернется -1 в этом случае. Но это, по крайней мере, правильно в соответствии с документацией. :)


[no name]

Очень благодарен. Где вы нашли эту документацию? Я смотрел и не видел этого.

Я также выполнял тесты с Indexof и lastindexof указанным количеством (символьными числами) и всегда возвращал -1. Но я ушел, потому что не пользуюсь им.

Richard Deeming

Я просто поместил имя типа в поле Браузер .NET API | Microsoft Docs[^].

Maciej Los

5ed!

Рейтинг:
1

zequion

Если вы знаете, в чем проблема параметра count, я также ценю это.