字符串比较 - strA.ToLower()== strB.ToLower()或strA.Equals(strB,StringComparisonType)?

时间:2009-11-02 09:21:15

标签: c# string comparison

根据标题,您使用字符串比较的做法是什么?为什么?

3 个答案:

答案 0 :(得分:31)

您尚未指定平台,但我猜测.NET。我强烈建议你使用后一种形式 - 因为案例比较并不像你想象的那么简单。 (它也避免了创建额外的字符串,但这是另一回事。)

例如,当您在土耳其运行时,如果您使用“mail”和“MAIL”,您希望代码执行什么操作?如果您使用ToLower它将返回false,同样如果您使用CurrentCultureIgnoreCase - 但如果您使用InvariantCultureIgnoreCase它将返回true。您需要考虑数据的来源以及您尝试使用它实现的目标。

有关详情和指导,请参阅MSDN中的recommendations for using strings

除了其他任何事情,我会说后者更有效地表达你的意图。您实际上并不感兴趣的是字符串的小写值 - 您对不区分大小写方式中的 equality 感兴趣...这正是第二个形式表达。

答案 1 :(得分:7)

Equals调用更好,因为它是一个字符串操作而不是三个。

StringComparison.OrdinalIgnoreCase选项进行案例说明性比较,您获得的效果最佳。但是,由于它没有考虑文化差异,因此可能并不总能得出您想要的结果。

如果您想更改案例以进行比较,建议您使用ToUpper而不是ToLower。一些异国情调的字母不能从大写字母到小写字母正确转换,但从大写字母到大写字母的转换有效。

在大多数情况下,性能并不重要,因此您应该使用在这种情况下最有意义的替代方案。

您尚未指定使用的语言,但是从==运算符中它看起来像C#。如果你要使用VB,你应该考虑=运算符不使用字符串类的相等opreator,而是VB自己进行比较的逻辑,这略有不同。

答案 2 :(得分:0)

我觉得使用第二个比第一个更好。因为,所有语言都支持第二种类型,使用起来会更方便。