gpt4 book ai didi

c# - string.IndexOf 在 .NET 5.0 中返回不同的值

转载 作者:行者123 更新时间:2023-12-03 15:00:25 26 4
gpt4 key购买 nike

当我在 .NET Core 3.1 中运行以下代码时,我得到 6作为返回值。

// .NET Core 3.1
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
结果:
6
但是当我在 .NET 5.0 中运行这段代码时,我得到了不同的结果。为什么会发生这种情况?
// .NET 5.0
string s = "Hello\r\nworld!";
int idx = s.IndexOf("\n");
Console.WriteLine(idx);
结果:
-1

最佳答案

评论和@Ray 的回答包含了原因。
虽然黑客入侵了 .csprojruntimeconfig.json文件可能会节省您的时间真正的解决方案是明确指定比较:

// this returns the expected result
int idx = s.IndexOf("\n", StringComparison.Ordinal);
出于某种原因 IndexOf(string)默认使用当前区域性比较,当您的应用程序在与您的区域设置不同的环境中执行时,即使使用较早的 .NET 版本也可能会导致意外。
使用特定于文化的搜索实际上是一种非常罕见的场景(例如,可以在浏览器、图书阅读器或 UI 搜索中有效)并且它比顺序搜索慢得多。
同样的问题适用于 StartsWith/ EndsWith/ Contains/ ToUpper/ ToLower甚至 ToStringParse可格式化类型的方法(尤其是在使用浮点类型时),因为这些默认情况下也使用当前区域性,这可能是许多陷阱的来源。但是,如果您不使用特定的比较或文化,最近的代码分析器(例如 FxCop、ReSharper)会警告您。建议在产品代码中为这些问题设置高严重性。

关于c# - string.IndexOf 在 .NET 5.0 中返回不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64833645/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com