Dela via


LastIndexOf har förbättrat hanteringen av tomma söksträngar

String.LastIndexOf och relaterade API:er returnerar nu korrekta värden när du söker efter en delsträng med noll längd (eller motsvarande noll längd) i en större sträng.

Ändra beskrivning

I .NET Framework och .NET Core 1.0 –3.1 String.LastIndexOf kan relaterade API:er returnera ett felaktigt värde när anroparen söker efter en understräng med noll längd.

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

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

Från och med .NET 5 returnerar dessa API:er rätt värde för LastIndexOf.

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

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

I de här exemplen 5 är det rätt svar eftersom "Hello".Substring(5) och "Hello".AsSpan().Slice(5) båda skapar en tom sträng, som är trivialt lika med den tomma delsträng som söks.

Orsak till ändringen

Den här ändringen var en del av en övergripande buggfixningsinsats kring stränghantering för .NET 5. Det hjälper också till att förena vårt beteende mellan Windows- och icke-Windows-plattformar. Mer information finns i dotnet/runtime#13383 och dotnet/runtime##13382.

Version introducerad

5,0

Du behöver inte vidta några åtgärder. .NET 5-körningen tillhandahåller de nya beteendena automatiskt.

Det finns ingen kompatibilitetsväxling för att återställa det gamla beteendet.

Berörda API:er