Funkcja LastIndexOf poprawiła obsługę pustych ciągów wyszukiwania

String.LastIndexOf powiązane interfejsy API zwracają teraz prawidłowe wartości podczas wyszukiwania podciągu o zerowej długości (lub równoważnej zerowej długości) w większym ciągu.

Opis zmiany

W programach .NET Framework i .NET Core 1.0 — 3.1 i powiązanych interfejsach API mogą zwracać nieprawidłową wartość, String.LastIndexOf gdy obiekt wywołujący wyszukuje podciąg o zerowej długości.

Console.WriteLine("Hello".LastIndexOf("")); // prints '4' (incorrect)

ReadOnlySpan<char> span = "Hello";
Console.WriteLine(span.LastIndexOf("")); // prints '0' (incorrect)

Począwszy od platformy .NET 5, te interfejsy API zwracają poprawną wartość elementu LastIndexOf.

Console.WriteLine("Hello".LastIndexOf("")); // prints '5' (correct)

ReadOnlySpan<char> span = "Hello";
Console.WriteLine(span.LastIndexOf("")); // prints '5' (correct)

W tych przykładach jest poprawna odpowiedź, 5 ponieważ "Hello".Substring(5) obaj "Hello".AsSpan().Slice(5) tworzą pusty ciąg, który jest trywialnie równy pustemu podciągowi, którego szukano.

Przyczyna wprowadzenia zmiany

Ta zmiana była częścią ogólnego wysiłku w zakresie naprawiania błędów związanych z obsługą ciągów dla platformy .NET 5. Pomaga również ujednolicić nasze zachowanie między platformami Windows i innych niż Windows. Aby uzyskać więcej informacji, zobacz dotnet/runtime#13383 i dotnet/runtime#13382.

Wprowadzona wersja

5,0

Nie musisz podejmować żadnych działań. Środowisko uruchomieniowe platformy .NET 5 automatycznie udostępnia nowe zachowania.

Brak przełącznika zgodności w celu przywrócenia starego zachowania.

Dotyczy interfejsów API