以下代碼適用于“所有人”機器,但我的除外:
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}");
}
我已經在 .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") - 行為沒有變化。
uj5u.com熱心網友回復:
重現:
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}");
}
從 .NET 5 開始,字串比較是使用不同的字串比較庫 (ICU) 完成的。在挪威語中,“aa”顯然與“a” “a”不同。請參閱在 .NET 5 上比較字串時的行為更改。
編輯:不知道為什么我包括上面的花絮,AFAIK 這在早期的框架版本上確實表現相同。正在研究...
您需要一個序數(字符數值)比較:
foo.StartsWith(bar, StringComparison.Ordinal)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365683.html
