StringComparison 枚举的选项

Posted

技术标签:

【中文标题】StringComparison 枚举的选项【英文标题】:Options of the StringComparison Enumeration 【发布时间】:2012-03-14 02:45:58 【问题描述】:

我对@9​​87654321@ 的选项感到困惑。我只想比较两个忽略大小写的字符串。谁能解释一下当前文化不变文化序数是什么意思?是否有大多数用例通用的选项,如果有,在什么情况下需要其他选项?

作为参考,StringComparison枚举的选项如下:

当前文化 CurrentCultureIgnoreCase 不变文化 InvariantCultureIgnoreCase 序数 OrdinalIgnoreCase

【问题讨论】:

Invariant vs Ordinal 解释在blogs.msdn.com/b/michkap/archive/2004/12/29/344136.aspx 【参考方案1】:

如果您要比较两个字符串是否相等,那么文化设置不会有太大区别(尽管它会影响,例如,土耳其语,它有带点和不带点的 i)。

如果您正在对字符串列表进行排序,则会有很大的不同;不同的文化通常以不同的顺序排序。

CurrentCulture 根据当前文化(即当前语言环境)对字符串进行排序。因此,这取决于您的软件在哪里运行。

InvariantCulture 基本上是美国英语设置。它是不变的,因为无论您的软件在哪里运行,它都是一样的。

序数比较基于 Unicode 代码点的值。这通常是比较相等性的最佳选择,但如果您要对字符串列表进行排序以显示给用户,则不是一个好的选择。

【讨论】:

感谢您的解释。当我测试平等时,我选择了OrdinalIgnoreCase 如果没有提供StringComparison,默认是什么? @DeanKuga 默认使用序数比较:区分大小写的比较,并使用当前区域性。见https://docs.microsoft.com/en-us/dotnet/csharp/how-to/compare-strings【参考方案2】:

见http://blogs.msdn.com/b/abhinaba/archive/2005/10/28/486173.aspx 和http://msdn.microsoft.com/en-us/library/ms973919。建议使用 Ordinal* 方法。

【讨论】:

以上是关于StringComparison 枚举的选项的主要内容,如果未能解决你的问题,请参考以下文章

我啥时候应该使用 StringComparison.InvariantCulture 而不是 StringComparison.CurrentCulture 来测试字符串是不是相等?

C#中的StringComparison与CompareOptions?

StringComparison.Ordinal 是不是与 InvariantCulture 相同,用于测试相等性?

在 .Net Standard 2.0 中替换 string.Contains(string, StringComparison)

如何在 c# (CA1307) 中使用 StringComparison?

CA1307:指定不为 string.Equals(string) 抛出 StringComparison