다음을 통해 공유


LastIndexOf에서 빈 검색 문자열 처리 기능이 향상됨

String.LastIndexOf 및 관련 API가 더 큰 문자열 내에서 길이가 0이거나 이와 동등한 substring을 검색할 때 올바른 값을 반환합니다.

변경 내용 설명

.NET Framework 및 .NET Core 1.0~3.1에서는 호출자가 길이가 0인 substring을 검색할 때 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)

이러한 예제에서는 "Hello".Substring(5)"Hello".AsSpan().Slice(5)가 모두 빈 문자열을 생성하기 때문에 5가 올바른 답이며, 일반적으로 이 값은 검색되는 빈 substring과 같습니다.

변경 이유

이러한 변경은 .NET 5의 문자열 처리와 관련된 전체적인 버그 수정 과정의 일부였습니다. 또한 Windows 플랫폼과 비 Windows 플랫폼 간의 동작을 통합하는 데 도움이 됩니다. 자세한 내용은 dotnet/runtime#13383dotnet/runtime##13382를 참조하세요.

도입된 버전

5.0

아무 작업도 수행할 필요가 없습니다. .NET 5 런타임은 새로운 동작을 자동으로 제공합니다.

이전 동작을 복원할 호환성 스위치가 없습니다.

영향을 받는 API