我住在土耳其,需要在程序中使用大写字母。我必须使用ToUpper(new CultureInfo(“en-US”,false))而不是ToUpper(),因为此功能在设置为土耳其文化的计算机中的行为有所不同(请参见下图)。然后我看到还有区域性不变的上层函数:ToUpperInvariant()。
我进行了搜索,但是找不到这些功能之间的任何信息差异。有什么区别吗?
资料来源: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.
ς Σ ς
ϐ Β ϐ
ϑ Θ ϑ
ϕ Φ ϕ
ϖ Π ϖ
ϰ Κ ϰ
ϱ Ρ ϱ
ϵ Ε ϵ
ẛ Ṡ ẛ
ι Ι ι