string.ToLower()和string.ToLowerInvariant()

Lou*_*hys 150 .net c# string

有什么区别以及何时使用什么?如果我总是使用ToLower()会有什么风险,如果我总是使用ToLowerInvariant(),风险又是什么?

Aar*_*nLS 131

根据当前的文化,ToLower可能会生成您不期望的特定于文化的小写字母.比如?nfo在i上没有点而不是info因此产生字符串比较.因此,ToLowerInvariant应该用于任何非语言特定的数据.如果您的用户输入可能是其母语/字符集,则通常是您使用ToLower的唯一时间.

请参阅此问题以获取此问题的示例: C# - ToLower()有时会从字母"I"中删除点


dan*_*iax 45

我认为这可能有用:

http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx

更新

如果您的应用程序依赖于字符串以可预测的方式更改而不受当前区域性影响的情况,请使用ToLowerInvariant方法.ToLowerInvariant方法等同于ToLower(CultureInfo.InvariantCulture).当字符串集合必须以可预测的顺序出现在用户界面控件中时,建议使用此方法.

... ToLower在大多数地方与ToLowerInvariant非常相似.文件表明,这些方法只会改变土耳其文化的行为.此外,在Windows系统上,文件系统不区分大小写,这进一步限制了它的使用......

http://www.dotnetperls.com/tolowerinvariant-toupperinvariant

心连心

  • 是ToLowerInvariant未按预期使用土耳其语.©成为ı (2认同)

Che*_*hen 26

String.ToLower()使用默认文化时String.ToLowerInvariant()使用不变文化.所以你基本上要求不变文化和序数字符串比较之间的差异.


Pac*_*ace 16

TL; DR:

使用"内容"(例如文章,帖子,评论,姓名,地点等)时使用ToLower().使用"文字"时(例如命令行参数,自定义语法,应该是枚举的字符串等)使用ToLowerInvariant().

例子:

= 错误使用ToLowerInvariant =

在土耳其语中,DI?意思是"外部",di?意思是"牙齿".适当的下壳DI?d??.因此,如果您使用ToLowerInvariant不当,您可能会在土耳其发生错别字.

= 错误使用ToLower =

现在假装你正在编写一个SQL解析器.在某处您将拥有如下代码:

if(operator.ToLower() == "like")
{
  // Handle an SQL LIKE operator
}
Run Code Online (Sandbox Code Playgroud)

更改文化时,SQL语法不会更改.一个法国人不写SÉLECTIONNEZ x DE books而不是SELECT X FROM books.但是,为了使上述代码有效,土耳其人需要写SELECT x FROM books WHERE Author L?KE '%Adams%'(注意首都上方的点,几乎不可能看到).这对您的土耳其用户来说非常令人沮丧.

  • 我是一名多年的专业开发人员,之前我知道这是“土耳其‘我’问题”。然而,这是迄今为止我读过的最好也是最短的解释。谢谢你! (4认同)
  • 虽然我不想把这变成“谢谢”评论,但我赞同这一点:一个例子胜过千言万语,更多的人应该这样做。像OP一样。 (2认同)