A manipulação de cadeias de caracteres de pesquisa vazias foi aprimorada no LastIndexOf

String.LastIndexOf e as APIs relacionadas agora retornam valores corretos em procuras de substring de comprimento zero (ou equivalentes ao comprimento zero) dentro de uma cadeia de caracteres maior.

Descrição das alterações

No .NET Framework e no .NET Core 1.0 – 3.1, String.LastIndexOf e as APIs relacionadas podem retornar um valor incorreto quando o chamador procura uma substring de comprimento zero.

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

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

Do .NET 5 em diante, essas APIs retornam o valor correto para LastIndexOf.

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

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

Nesses exemplos, 5 é a resposta correta porque "Hello".Substring(5) e "Hello".AsSpan().Slice(5) produzem uma cadeia de caracteres vazia, que é igual à substring vazia que é procurada.

Motivo da alteração

Essa alteração fez parte de uma ação geral de correção de bugs em relação ao tratamento de cadeia de caracteres para o .NET 5. Ela também ajuda a unificar o comportamento entre plataformas Windows e não Windows. Para obter mais informações, confira dotnet/runtime#13383 e dotnet/runtime##13382.

Versão introduzida

5,0

Você não precisa realizar nenhuma ação. O runtime do .NET 5 fornece os novos comportamentos automaticamente.

Não há nenhuma opção de compatibilidade para restaurar o comportamento antigo.

APIs afetadas