Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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
Empfohlene Aktion
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.