【发布时间】:2020-11-14 11:58:46
【问题描述】:
当我在 .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
【问题讨论】:
-
这个例子是docs.microsoft.com/en-us/dotnet/standard/… 的精确副本吗?那我不明白这个问题,因为它在那里解释了为什么以及如何恢复到旧的行为。
-
这完全取决于使用的 CultureInfo。 NetCore GitHub 存储库中有详细记录的差异。
-
@John:实际上在不指定比较的情况下使用
IndexOf一直是个定时炸弹。如果与不同的区域设置一起使用,即使使用 pre-.NET 5 也可能会失败。我希望我知道谁的想法是默认使用当前文化而不是使用序数比较......与ToString和Parse相同,但没有指定文化。几乎所有关于 SO 的浮点格式化/解析问题都与这个决策问题有关。