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));
但是我使用不变量文化,所以它应该将
看来我得费尽周折才能用上
String.Compare(String, String, CultureInfo, CompareOptions)
string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) //true
但是,我目前的文化是he-IL
,所以我不知道为什么它是有效的。
:
我不能理解当
CompareOptions
不工作,虽然我使用StringComparison.InvariantCulture
(,请不要引用我到msdn页面,因为我已经读过了,我不完全理解他们的解释)简单来说,我应该在什么时候使用每个过载?
非空格组合字符不是文化的东西吗?
你对InvariantCulture
的混淆是很常见的。最好的用法是当您将数据持久化到文件或从文件持久化数据,并且不关心给定文化的怪异之处(例如,
作为小数分隔符或带有'u'的拼写风格)时。
它在比较中的作用有限,特别是当您需要特定文化的行为时。从表面上看,这似乎不太明显,但将带有重音的e与没有重音的e进行比较……这要看情况了
啊哈!情况取决于你说。
看起来像是针对特定文化的重载的工作。无论何时你知道你在使用哪种文化,你都应该把这种文化传承下去。
在这种情况下,您希望。net忽略变音符号(p)。例如重音aigu),因此您还应该使用接受CompareOptions
的重载(特别是您注意到的CompareOptions.IgnoreNonSpace
)。