以下代码适用于“所有人”机器,除了我的机器:
var foo = "caa";
var bar = "ca";
if (foo.StartsWith(bar, false, CultureInfo.GetCultureInfo("no")))
Console.WriteLine($"{foo} starts with {bar}");
else
{
Console.WriteLine($"{foo} does not start with {bar}");
}
Run Code Online (Sandbox Code Playgroud)
我在 .net 5.0.400、5.0.403、6.0.100 上尝试过 - 所有打印“caa 不以 ca 开头”。我没有从任何地方复制这些字符,而是逐字逐句地输入它们。
我知道这实际上只是在我的计算机上,但我不明白为什么或是什么导致了这种情况。
编辑:我使用的是 Windows 10 - 操作系统内部版本:19043.1348。nb-NO 键盘,en-US Windows UI 语言。
编辑:添加 if (foo.StartsWith(bar, false, CultureInfo.GetCultureInfo("no") - 行为没有变化。
重现:
System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("nb-NO");
var foo = "caa";
var bar = "ca";
if (foo.StartsWith(bar))
{
Console.WriteLine($"{foo} starts with {bar}");
}
else
{
Console.WriteLine($"{foo} does not start with {bar}");
}
Run Code Online (Sandbox Code Playgroud)
从 .NET 5 开始,字符串比较是使用不同的字符串比较库 (ICU)完成的。在挪威语中,“aa”显然与“a”+“a”不同。请参阅在 .NET 5+ 上比较字符串时的行为变化。
比较(感谢@Charlieface):
您需要进行序数(字符数值)比较:
foo.StartsWith(bar, StringComparison.Ordinal)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
397 次 |
| 最近记录: |