类System.StringComparer和System.StringComparison之间的差异

本文关键字:System 之间 StringComparison StringComparer | 更新日期: 2023-09-27 18:20:37

这两个类之间有什么区别?

我使用了CCD_ 1和CCD_。它们有什么不同吗?还是两者都一样?

类System.StringComparer和System.StringComparison之间的差异

StringComparer是一个Class,它实现了IComparerIEqualityComparerIComparer<String>等比较接口,因此可以用来比较两个字符串。

StringComparison只是一个Enum,您可以将其传递给某些方法,以指示您想要的比较类型。在这种情况下,我怀疑底层方法会使用System.StringComparer.OrdinalIgnoreCase()0来进行实际比较。

何时使用每个

特定于字符串的方法,如String.Equals,只接受StringComparison值,所以在这种情况下会使用该值。

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

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引用类型的内容之间的比较"基础"。