类System.StringComparer和System.StringComparison之间的差异
本文关键字:System 之间 StringComparison StringComparer | 更新日期: 2023-09-27 18:20:37
这两个类之间有什么区别?
我使用了CCD_ 1和CCD_。它们有什么不同吗?还是两者都一样?
StringComparer
是一个Class
,它实现了IComparer
、IEqualityComparer
、IComparer<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
引用类型的内容之间的比较"基础"。