System.StringComparer和System.StringComparison类之间的区别?

这两个class级有什么区别?

我使用了System.StringComparer.OrdinalIgnoreCase()System.StringComparison.OrdinalIgnoreCase() ,两者都产生了相同的结果。 他们有任何区别或两者相同吗?

StringComparer是一个实现比较接口的Class ,如IComparerIEqualityComparerIComparer ,因此它可用于比较两个字符串。

StringComparison只是一个Enum ,您可以将其传递给某些方法以指示您想要哪种比较。 在这种情况下,我怀疑底层方法将使用StringComparer进行实际比较。

何时使用每个

String.Equals之类的字符串特定方法只接受StringComparison值,因此在这种情况下您将使用它。

您可以将StringComparer用于将比较器作为参数的方法,并在将比较字符串的上下文中调用。 例如,如果您有一个List ,并希望以不区分大小写的方式对该列表进行排序 ,则可以执行以下操作:

 myList.Sort(StringComparer.OrdinalIgnoreCase); 

问题是: 为什么要在框架中同时拥有它们?

解释是这样的:

  • StringComparison是:

指定String.Compare和String.Equals方法的某些重载使用的区域性,大小写和排序规则

  • StringComparer是:

表示使用特定案例和基于文化或序数比较规则的字符串比较操作

注意到差异?

在第二种情况下,所以在StringComparer情况下,存在string comparison operation的概念,但不是string类型。

事实上,如果你看这个,你会读到:

一些将字符串比较作为中心操作的非字符串方法使用StringComparer类型。

一个例子,来自同一个链接:

 Array.BinarySearch(this.storedNames, name, StringComparer.Ordinal) 

我使用StringComparer就像array引用类型的内容之间的比较“base”。