我住在土耳其,需要在程序中使用大写字母。我必须使用ToUpper(new CultureInfo(“en-US”,false))而不是ToUpper(),因为此功能在设置为土耳其文化的计算机中的行为有所不同(请参见下图)。然后我看到还有区域性不变的上层函数:ToUpperInvariant()。

我进行了搜索,但是找不到这些功能之间的任何信息差异。有什么区别吗?

c# - ToUpperInvariant()和ToUpper(new CultureInfo ("en-US",false)之间有什么区别-LMLPHP
c# - ToUpperInvariant()和ToUpper(new CultureInfo ("en-US",false)之间有什么区别-LMLPHP

资料来源:http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html

最佳答案

ToUpper()ToUpper(CultureInfo.CurrentCulture)相同,
ToUpperInvariant()ToUpper(CultureInfo.InvariantCulture)相同,注释表明您已经知道了这一点。

因此,这里当然有区别-CultureInfo.InvariantCulture仅在不与人(解析器等)交互时使用,因为它会提供一致的结果,而ToUpper(CultureInfo.CurrentCulture)在计算机,服务器等之间有很大差异。
CultureInfo.InvariantCulture是一种受英语启发的文化,类似于但不等于en-US,并且不受任何国家或地区的约束,并且不能由用户自定义(如documentation中明确指出的)。

至于明确回答有关ToUpper的问题-是的,有区别。在所有这些情况下(如下所示),ToUpperInvariant()与小写源是相同的char:

lc    en-US     Invariant
==    =====     =========

µ     Μ         µ
ı     I         ı
ſ     S         ſ
Dž     DŽ         Dž
Lj     LJ         Lj
Nj     NJ         Nj
Dz     DZ         Dz
ͅ      Ι         ͅ  //  ͅͅͅͅͅͅͅthis one lives in the 4th dimension.
ς     Σ         ς
ϐ     Β         ϐ
ϑ     Θ         ϑ
ϕ     Φ         ϕ
ϖ     Π         ϖ
ϰ     Κ         ϰ
ϱ     Ρ         ϱ
ϵ     Ε         ϵ
ẛ     Ṡ         ẛ
ι     Ι         ι

09-09 23:48
查看更多