有什么区别,什么时候用什么?如果我总是使用ToLower()和ToLowerInvariant()的风险是什么?
String.ToLower()使用默认区域性,而String.ToLowerInvariant()使用不变区域性。所以你实际上是在问不变区域性和序数字符串比较之间的区别。
我认为这很有用:
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
hth
根据当前区域性的不同,ToLower可能会产生一个特定于区域性的小写字母,这不是您所期望的。例如,在i上生成没有点而不是info的hinfo,从而搞砸了字符串比较。因此,ToLowerInvariant应该用于任何非特定于语言的数据。当用户输入可能是他们的母语/字符集时,通常是使用ToLower的唯一时间。
请看这个问题的例子: c# - ToLower()有时会从字母“I”中删除点
TL; diana:
当处理“内容”(例如文章、帖子、评论、名字、地点等)时,使用ToLower()。当使用“字面量”(例如命令行参数,自定义语法,应该是enum的字符串等)时,使用ToLowerInvariant()。
例子:
=错误地使用ToLowerInvariant =
在土耳其语中,DIŞ的意思是“外面”,di的意思是“牙齿”。DIŞ的正确小写字母是dagh。所以,如果你不正确地使用ToLowerInvariant,你可能会在土耳其打字错误。
= ToLower使用错误=
现在假设您正在编写一个SQL解析器。在某些地方,你会有这样的代码:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
当您更改区域性时,SQL语法不会更改。法国人不会写SÉLECTIONNEZ x DE books而不是SELECT x FROM books。然而,为了让上面的代码工作,土耳其人需要写SELECT x FROM books WHERE Author LİKE '%Adams%'(注意大写i上面的点,几乎不可能看到)。这将是相当令人沮丧的土耳其用户。
推荐文章
- Selenium c# WebDriver:等待元素出现
- 我如何添加双引号的字符串,是在一个变量?
- 如何创建数组。包含不区分大小写的字符串数组?
- 检查字符串是否包含字符串列表中的元素
- 我如何在c++中创建一个随机的字母数字字符串?
- 最好的方法在asp.net强制https为整个网站?
- 如何使用JavaScript大写字符串中每个单词的第一个字母?
- 将字符串转换为System.IO.Stream
- Java中的split()方法对点(.)不起作用。
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- 如何从枚举中选择一个随机值?
- 在Lua中拆分字符串?
- 驻留在App_Code中的类不可访问
- 在链式LINQ扩展方法调用中等价于'let'关键字的代码