System.StringComparer和System.StringComparison类之间的区别?
这两个class级有什么区别?
我使用了System.StringComparer.OrdinalIgnoreCase()
和System.StringComparison.OrdinalIgnoreCase()
,两者都产生了相同的结果。 他们有任何区别或两者相同吗?
StringComparer
是一个实现比较接口的Class
,如IComparer
, IEqualityComparer
, IComparer
,因此它可用于比较两个字符串。
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”。
- 从使用AJAX填充的下拉列表中获取值
- Asp.Net Identity 2.0自定义角色管理器:实体类型IdentityRole不是当前上下文的模型的一部分
- System.Net.Http.HttpRequestException将内容复制到流时出错
- c#/ Linq总和在哪里
- 使用Windows .NET或ASP.NET应用程序时,存储数据库密码的位置
- nHibernate在多个线程上枚举相同的集合
- 如何委托telerik网格视图从每个子页面的父页面调用常用方法?
- 如何在Visual Studio中添加SQL Server数据库文件(.mdf)而不安装SQL Server Express Edition?
- 将操作数作为sql参数传递