为什么在做case时避免使用string.ToLower()
我已经读过,在应用程序中进行大量字符串比较并使用ToLower方法时,此方法相当昂贵。 我想知道任何人都可以向我解释它是如何代价高昂的。 希望有任何信息或解释。 谢谢!
这是昂贵的,因为一个新的字符串是“制造”。
将其与调用相比较,比如说Equals与一个要求不区分大小写的比较的重载。 这样,一旦识别出不匹配,就可以终止比较而无需创建新字符串。
为了不使用ToLower()
另请参阅编写文化安全的托管代码。
特别是,请参阅土耳其语中的“我”一节 - 它在过去的工作中造成了无尽的问题......
如果当前的文化是土耳其语或阿塞拜疆语,调用"I".ToLower()
不会返回"i"
。 做一个直接的比较会导致问题。
使用String.Compare(String,String,StringComparison)方法还有另外一个好处,除了在其他答案中提到的方法之外:
您可以传递null
值并仍然获得相对比较值。 这使得编写字符串比较变得容易很多。
String.Compare(null, "some StrinG", StringComparison.InvariantCultureIgnoreCase);
从文档:
一个或两个比较可以为空 。 根据定义,任何字符串(包括空字符串(“”))都会比空引用进行比较; 和两个空引用相互比较相等。
链接地址: http://www.djcxy.com/p/2103.html上一篇: Why avoid string.ToLower() when doing case
下一篇: C# Null propagating operator / Conditional access expression & if blocks