Freigeben über


LastIndexOf hat die Behandlung leerer Suchzeichenfolgen verbessert.

String.LastIndexOf und ähnliche APIs geben nun beim Suchen nach einer Teilzeichenfolge mit der Länge 0 (oder einem vergleichbaren Wert) in einer größeren Zeichenfolge die richtigen Werte zurück.

Änderungsbeschreibung

In .NET Framework und .NET Core 1.0 - 3.1 können String.LastIndexOf und zugehörige APIs einen falschen Wert zurückgeben, wenn der Aufrufer nach einer Teilzeichenfolge mit einer Länge von null sucht.

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

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

Ab .NET 5 geben diese APIs den richtigen Wert für LastIndexOf.

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

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

In diesen Beispielen ist die richtige Antwort, 5 da "Hello".AsSpan().Slice(5)"Hello".Substring(5) beide eine leere Zeichenfolge erzeugen, die trivial gleich der leeren Teilzeichenfolge ist, die gesucht wird.

Grund für Änderung

Diese Änderung war Teil eines allgemeinen Fehlerkorrekturaufwands für die Zeichenfolgenbehandlung für .NET 5. Es hilft auch, unser Verhalten zwischen Windows- und Nicht-Windows-Plattformen zu vereinheitlichen. Weitere Informationen finden Sie unter dotnet/runtime#13383 und dotnet/runtime##13382.

Eingeführte Version

5.0

Sie müssen keine Maßnahmen ergreifen. Die .NET 5-Laufzeit stellt die neuen Verhaltensweisen automatisch bereit.

Es gibt keinen Kompatibilitätswechsel, um das alte Verhalten wiederherzustellen.

Betroffene APIs