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

C# 字符串比较-strA.ToLower()==strB.ToLower()或strA.Equals(strB,StringComparisonType)?,c#,string,comparison,C#,String,Comparison,根据标题,您使用什么样的字符串比较练习以及为什么?您还没有指定平台,但我猜是.NET。我强烈建议您使用后一种形式,因为案例比较并不像您预期的那么简单。(它还可以避免创建额外的字符串,但这是另一回事。) 例如,当代码在土耳其运行时,您希望代码在显示“mail”和“mail”时做什么?如果使用ToLower它将返回false,同样,如果使用CurrentCultureInogoreCase,但如果使用InvariantCultureInogoreCase它将返回true。你需要考虑数据的来源以及你试

根据标题,您使用什么样的字符串比较练习以及为什么?

您还没有指定平台,但我猜是.NET。我强烈建议您使用后一种形式,因为案例比较并不像您预期的那么简单。(它还可以避免创建额外的字符串,但这是另一回事。)

例如,当代码在土耳其运行时,您希望代码在显示“mail”和“mail”时做什么?如果使用
ToLower
它将返回false,同样,如果使用
CurrentCultureInogoreCase
,但如果使用
InvariantCultureInogoreCase
它将返回true。你需要考虑数据的来源以及你试图用它实现什么

有关更多信息和指南,请参阅MSDN中的


除此之外,我认为后者更有效地表达了你的意图。实际上,您对字符串的小写值不感兴趣-您对不区分大小写的相等性感兴趣。。。这正是第二种形式所表达的。

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

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

使用
StringComparison.OrdinalIgnoreCase
选项,您可以在不区分大小写的情况下获得最佳性能。然而,因为它不考虑文化差异,它可能并不总是给出你想要的结果。 如果要更改案例进行比较,建议使用
ToUpper
而不是
ToLower
。一些外来字母不能正确地从大写字母转换为小写字母,但从小写字母转换为大写字母是可行的

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


您没有指定使用哪种语言,但从
=
操作符看,它看起来像C。如果你想使用VB,你应该考虑<代码> = /Cux>运算符不使用String类的相等opror,但VB自己的比较逻辑,这有点不同。

你能用土耳其的“邮件”和“邮件”来深入解释例子吗?在这种情况下,我为什么要期望False?@Valentinvynogradskiy:因为在土耳其(使用土耳其文化/地区)使用大写字母
mail
,就不会得到
mail
。。。
I
的大写字母不同。