当我像这样定义开尔文符号(http://www.unicode-symbol.com/u/212A.html)时:
var kelvinSign = "K";
并做一个控制台写行:
Console.WriteLine("{0} - {1}=>ToLower={2} - {3}=>ToLowerInvariant={4}",
kelvinSign,
kelvinSign.ToLower(), kelvinSign.ToLower() == "k",
kelvinSign.ToLowerInvariant(), kelvinSign.ToLowerInvariant() == "k");
我在一台 PC 上得到这个输出:
K - k=>ToLower=True - K=>ToLowerInvariant=False
在另一台电脑上我得到:
K - k=>ToLower=True - k=>ToLowerInvariant=True
这表明ToLowerInvariant()方法的工作方式不同?
笔记
- 在两个系统上
Thread.CurrentThread.CurrentCulture
和Thread.CurrentThread.UICurrentCulture
是相同的:"en-US"
- 两者都在运行net5.0
有效的更新
系统具有以下设置:
- 操作系统 =“Windows 10 专业版”
UseNls = False
CultureInfo.InvariantCulture =
CultureInfo.InvariantCulture.Name =
CultureInfo.InvariantCulture.CultureTypes = SpecificCultures, InstalledWin32Cultures
CultureInfo.InvariantCulture.DisplayName = Unknown language
CultureInfo.InvariantCulture.TwoLetterISOLanguageName = iv
CultureInfo.InvariantCulture.ThreeLetterISOLanguageName = ivl
CurrentCulture = en-US
CurrentUICulture = en-US
K - k=>ToLower=True - k=>ToLowerInvariant=True
不工作的系统有以下设置:
- OS =“Windows Server 2019”(实际上这是来自 Azure 的构建代理)
UseNls = True
CultureInfo.InvariantCulture =
CultureInfo.InvariantCulture.Name =
CultureInfo.InvariantCulture.CultureTypes = SpecificCultures, InstalledWin32Cultures
CultureInfo.InvariantCulture.DisplayName = Invariant Language (Invariant Country)
CultureInfo.InvariantCulture.TwoLetterISOLanguageName = iv
CultureInfo.InvariantCulture.ThreeLetterISOLanguageName = ivl
CurrentCulture = en-US
CurrentUICulture = en-US
K - k=>ToLower=True - K=>ToLowerInvariant=False