StringComparison vs CompareOptions in C#?

本文关键字:in CompareOptions vs StringComparison | 更新日期: 2023-09-27 17:51:19

看完这篇文章我还是很困惑:

 string s1 = "hello";
 string s2 = "héllo";

不同之处在于口音/文化。

下面代码的结果是False

Console.WriteLine(s1.Equals(s2, StringComparison.InvariantCulture));

但是我使用不变量文化,所以它应该将视为e。(默认是英语,不是吗?)

看来我得费尽周折才能用上

String.Compare(String, String, CultureInfo, CompareOptions) 

  string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) //true

但是,我目前的文化是he-IL,所以我不知道为什么它是有效的。

:

  • 我不能理解当CompareOptions不工作,虽然我使用StringComparison.InvariantCulture (,请不要引用我到msdn页面,因为我已经读过了,我不完全理解他们的解释)

  • 简单来说,我应该在什么时候使用每个过载?

  • 非空格组合字符不是文化的东西吗?

StringComparison vs CompareOptions in C#?

你对InvariantCulture的混淆是很常见的。最好的用法是当您将数据持久化到文件或从文件持久化数据,并且不关心给定文化的怪异之处(例如,作为小数分隔符或带有'u'的拼写风格)时。

它在比较中的作用有限,特别是当您需要特定文化的行为时。从表面上看,这似乎不太明显,但将带有重音的e与没有重音的e进行比较……这要看情况了

啊哈!情况取决于你说。

看起来像是针对特定文化的重载的工作。无论何时你知道你在使用哪种文化,你都应该把这种文化传承下去。

在这种情况下,您希望。net忽略变音符号(p)。例如重音aigu),因此您还应该使用接受CompareOptions的重载(特别是您注意到的CompareOptions.IgnoreNonSpace)。