Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类System.StringComparer和System.StringComparation之间的差异?_C#_Asp.net - Fatal编程技术网

C# 类System.StringComparer和System.StringComparation之间的差异?

C# 类System.StringComparer和System.StringComparation之间的差异?,c#,asp.net,C#,Asp.net,这两门课有什么不同 我使用了System.StringComparer.OrdinalIgnoreCase()和System.stringcomparation.OrdinalIgnoreCase(),两者都产生了相同的结果。它们有什么不同吗?或者它们都一样吗?StringComparer是一个类,它实现了比较接口,如IComparer,IEqualityComparer,IComparer,这样就可以用来比较两个字符串 StringComparison只是一个Enum,您可以将它传递给某些方法

这两门课有什么不同


我使用了
System.StringComparer.OrdinalIgnoreCase()
System.stringcomparation.OrdinalIgnoreCase()
,两者都产生了相同的结果。它们有什么不同吗?或者它们都一样吗?

StringComparer
是一个
,它实现了比较接口,如
IComparer
IEqualityComparer
IComparer
,这样就可以用来比较两个字符串

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

何时使用每个

特定于字符串的方法,如仅接受
StringComparison
值,因此在本例中您将使用该值

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

myList.Sort(StringComparer.OrdinalIgnoreCase);

问题是:为什么要在一个框架中同时使用这两种方法?

解释是这样的:

  • 比较如下:
指定特定用户要使用的区域性、大小写和排序规则 String.Compare和String.Equals方法的重载

  • StringComparer是:
表示使用特定大小写的字符串比较操作 基于区域性或顺序比较规则

注意到不同了吗

在第二种情况下,因此在
StringComparer
的情况下,有
字符串比较操作
的概念,但没有
字符串
类型

事实上,如果你看一下,你会简单地读到:

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

例如,来自同一链接:

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

我使用
StringComparer
来比较
array
reference类型的内容。

您能发布您的案例以及每个案例的预期结果吗。我想知道您是否正在比较==vs Equals的引用与值
System.StringComparison.OrdinalIgnoreCase
是一个枚举值,而不是一个方法。因此,
System.StringComparison.OrdinalIgnoreCase()
无法编译。我不知道你到底是什么意思,回答得很好。更清楚地说:您可能永远都不应该设计一个将StringComparison作为输入的方法或类-您应该将其作为StringComparier,因为这将允许您的代码的客户端在需要时传入他们自己的自定义比较器。比较器是可扩展的,而比较是不可扩展的。