1

读完后仍然很困惑:

 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 页面,因为我已经阅读过它并且我不完全理解他们的解释

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

  • 间距组合字符不是一种文化吗?

4

1 回答 1

2

你的困惑InvariantCulture很常见。最好的用途是当您在文件中保存数据并且不关心给定文化的奇怪之处(例如,小数分隔符或带有“u”的拼写风格)时。

它在比较中的用途有限,尤其是当您需要特定于文化的行为时。从表面上看,这似乎并不明显,但是将 e 与一个尖锐的口音进行比较与没有一个的 e 相同......这取决于情况。

啊哈!你说的视情况而定。

看起来像是针对特定文化超载的工作。任何时候你知道你正在使用哪种文化,你都应该传递这种文化。

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

于 2013-01-11T19:40:28.800 回答