Share via


LastIndexOf a amélioré la gestion des chaînes de recherche vides

String.LastIndexOf et les API associées retournent désormais des valeurs correctes lors de la recherche d’une sous-chaîne de longueur nulle (ou d’équivalent de longueur nulle) dans une chaîne plus grande.

Description de la modification

Dans .NET Framework et .NET Core 1.0 - 3.1, String.LastIndexOf et les API associées peuvent retourner une valeur incorrecte lorsque l’appelant recherche une sous-chaîne de longueur nulle.

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

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

À compter de .NET 5, ces API retournent la valeur correcte pour LastIndexOf.

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

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

Dans ces exemples, 5 est la réponse correcte, car "Hello".Substring(5) et "Hello".AsSpan().Slice(5) produisent toutes deux une chaîne vide, qui est trivialement égale à la sous-chaîne vide recherchée.

Raison du changement

Ce changement faisait partie d’un effort global de correction de bogues autour de la gestion des chaînes pour .NET 5. Il permet également d’unifier notre comportement entre les plateformes Windows et non Windows. Pour plus d’informations, consultez dotnet/runtime#13383 et dotnet/runtime##13382.

Version introduite

5,0

Aucune action de votre part n’est nécessaire. Le runtime .NET 5 fournit automatiquement les nouveaux comportements.

Il n’existe aucun commutateur de compatibilité pour restaurer l’ancien comportement.

API affectées