Condividi tramite


LastIndexOf ha migliorato la gestione delle stringhe di ricerca vuote

String.LastIndexOf e le API correlate restituiscono ora valori corretti durante la ricerca di una sottostringa di lunghezza zero (o equivalente a lunghezza zero) all'interno di una stringa più grande.

Descrizione delle modifiche

In .NET Framework e .NET Core 1.0 - 3.1 String.LastIndexOf e le API correlate potrebbero restituire un valore non corretto quando il chiamante cerca una sottostringa di lunghezza zero.

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

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

A partire da .NET 5, queste API restituiscono il valore corretto per LastIndexOf.

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

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

In questi esempi 5 è la risposta corretta perché "Hello".Substring(5) e "Hello".AsSpan().Slice(5) producono entrambi una stringa vuota, che è banalmente uguale alla sottostringa vuota ricercata.

Motivo della modifica

Questa modifica faceva parte di un'operazione complessiva di correzione di bug per la gestione delle stringhe per .NET 5. Consente inoltre di unificare il comportamento tra le piattaforme Windows e non Windows. Per altre informazioni, vedere dotnet/runtime#13383 e dotnet/runtime##13382.

Versione introdotta

5.0

Non è necessario eseguire alcuna azione. Il runtime di .NET 5 fornisce automaticamente i nuovi comportamenti.

Non esiste alcuna opzione di compatibilità per ripristinare il comportamento precedente.

API interessate