Sdílet prostřednictvím


Funkce LastIndexOf vylepšila zpracování prázdných vyhledávacích řetězců.

String.LastIndexOf a související rozhraní API teď vrací správné hodnoty při hledání podřetězce nulové délky (nebo ekvivalentu nulové délky) ve větším řetězci.

Změna popisu

V rozhraní .NET Framework a .NET Core 1.0 – 3.1 String.LastIndexOf a související rozhraní API můžou při hledání podřetězce nulové délky vrátit nesprávnou hodnotu.

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

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

Počínaje rozhraním .NET 5 vrátí tato rozhraní API správnou hodnotu pro LastIndexOf.

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

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

V těchto příkladech je správná odpověď, 5 protože "Hello".Substring(5) oba "Hello".AsSpan().Slice(5) vytvářejí prázdný řetězec, který je triviálně roven prázdnému podřetězci, který se hledá.

Důvod změny

Tato změna byla součástí celkové chyby, která opravuje úsilí týkající se zpracování řetězců pro .NET 5. Pomáhá také sjednotit naše chování mezi platformami Windows a platformami mimo Windows. Další informace najdete v tématu dotnet/runtime#13383 a dotnet/runtime##13382.

Zavedená verze

5,0

Nemusíte nic dělat. Modul runtime .NET 5 poskytuje nové chování automaticky.

Pro obnovení starého chování neexistuje žádný přepínač kompatibility.

Ovlivněná rozhraní API