LastIndexOf 改进了对空搜索字符串的处理
在较大字符串中搜索零长度(或零长度等效项)子字符串时,String.LastIndexOf 和相关 API 现在返回正确的值。
更改描述
在 .NET Framework 和 .NET Core 1.0-3.1 中,当调用方搜索零长度子字符串时,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)
在这些示例中,5
为正确答案,因为 "Hello".Substring(5)
和 "Hello".AsSpan().Slice(5)
均生成一个空字符串,该字符串完全等同于所查找的空子字符串。
更改原因
此更改是围绕 .NET 5 字符串处理的整体 bug 修复工作的一部分。 它还有助于统一 Windows 和非 Windows 平台的行为。 有关详细信息,请参阅 dotnet/runtime#13383 和 dotnet/runtime##13382。
引入的版本
5.0
建议操作
你不必执行任何操作。 .NET 5 运行时自动提供新行为。
没有用于还原旧行为的兼容性开关。