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

Im .NET Framework und in .NET Core 1.0–3.1 geben String.LastIndexOf und ähnliche APIs möglicherweise einen falschen Wert zurück, wenn der Aufrufer nach einer Teilzeichenfolge mit der Länge 0 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 zurück.

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

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

In diesen Beispielen ist 5 die richtige Antwort, da "Hello".Substring(5) und "Hello".AsSpan().Slice(5) eine leere Zeichenfolge zurückgeben. Dieser Wert und die gesuchte leere Teilzeichenfolge sind trivial gleich.

Grund für die Änderung

Diese Änderung war Teil einer allgemeinen Fehlerbehebung für die Zeichenfolgenverarbeitung in .NET 5. Außerdem kann das Verhalten zwischen Windows- und Nicht-Windows-Plattformen vereinheitlicht werden. Weitere Informationen finden Sie unter dotnet/runtime#13383 und dotnet/runtime##13382.

Eingeführt in Version

5.0

Sie müssen keine Maßnahmen ergreifen. Die .NET 5-Runtime stellt das neue Verhalten automatisch bereit.

Es gibt keine Kompatibilitätsoption, um das alte Verhalten wiederherzustellen.

Betroffene APIs