LastIndexOf では、空の検索文字列の処理が改善されています

String.LastIndexOf と関連 API により、より大きな文字列内で長さ 0 の (または長さ 0 と同等の) サブ文字列を検索するときに、正しい値が返されるようになりました。

変更の説明

.NET Framework と .NET Core 1.0 から 3.1 では、呼び出し元が長さ 0 のサブ文字列を検索するときに、String.LastIndexOf と関連 API によって不正な値が返されることがありました。

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

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

.NET 5 以降では、これらの API によって LastIndexOf の正しい値が返されます。

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

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

これらの例では、"Hello".Substring(5)"Hello".AsSpan().Slice(5) の両方で空の文字列が生成されるため、5 は正しい答えです。これは、検索対象の空のサブ文字列と同等です。

変更理由

この変更は、.NET 5 の文字列処理に関する全般的なバグ修正作業の一環として行われました。 またこれは、Windows の動作と Windows 以外のプラットフォームの動作を統合するのにも役立ちます。 詳細については、dotnet/runtime#13383 および dotnet/runtime##13382 を参照してください。

導入されたバージョン

5.0

何らかのアクションをとる必要はありません。 .NET 5 ランタイムでは、新しい動作が自動的に提供されます。

以前の動作を復元するための互換性スイッチはありません。

影響を受ける API