有什么区别,什么时候用什么?如果我总是使用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上面的点,几乎不可能看到)。这将是相当令人沮丧的土耳其用户。
推荐文章
- 如何在没有任何错误或警告的情况下找到构建失败的原因
- 跨线程操作无效:控件“textBox1”从创建它的线程以外的线程访问
- Visual Studio弹出提示:“操作无法完成”
- 否ConcurrentList<T>在。net 4.0?
- 在c#中解析字符串为日期时间
- 由Jon Skeet撰写的《Singleton》澄清
- 字符串中的单词大写
- 自定义数字格式字符串始终显示符号
- 单元测试无效方法?
- Post参数始终为空
- 使用Moq验证方法调用
- string.ToLower()和string.ToLowerInvariant()
- 如何为一个或枚举删除一个项目?
- 检查instance是否属于某个类型
- PHP字符串中的花括号