Улучшена обработка пустых строк поиска с помощью LastIndexOf
String.LastIndexOf и связанные API теперь возвращают правильные значения при поиске подстроки нулевой длины (или эквивалентной нулевой длины) в более длинной строке.
Описание изменения
В .NET Framework и .NET Core 1.0–3.1 String.LastIndexOf и связанные API могут возвращать неправильное значение, когда вызывающий объект выполняет поиск подстроки нулевой длины.
Console.WriteLine("Hello".LastIndexOf("")); // prints '4' (incorrect)
ReadOnlySpan<char> span = "Hello";
Console.WriteLine(span.LastIndexOf("")); // prints '0' (incorrect)
Начиная с .NET 5 эти API возвращают правильное значение для LastIndexOf
.
Console.WriteLine("Hello".LastIndexOf("")); // prints '5' (correct)
ReadOnlySpan<char> span = "Hello";
Console.WriteLine(span.LastIndexOf("")); // prints '5' (correct)
В этих примерах 5
является правильным ответом, поскольку и "Hello".Substring(5)
, и "Hello".AsSpan().Slice(5)
создают пустую строку, которая является эквивалентной по отношению к искомой пустой подстроке.
Причина изменения
Это изменение было внесено в рамках устранения ошибок, связанных с обработкой строк для .NET 5. Это также помогает унифицировать поведение платформы Windows и платформ, отличных от Windows. Дополнительные сведения см. в статьях dotnet/runtime#13383 и dotnet/runtime##13382.
Представленные версии
5,0
Рекомендуемое действие
Никаких дополнительных действий от вас не требуется. Среда выполнения .NET 5 автоматически предоставляет новые варианты поведения.
Отсутствует параметр совместимости для восстановления старого поведения.