为什么在做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