【问题标题】:Does .NET have a case-ignoring implementation of IComparer<string>?.NET 是否有 IComparer<string> 的忽略大小写的实现?
【发布时间】:2021-02-15 17:23:03
【问题描述】:

我有Dictionary&lt;string, int&gt;。我想通过字符串键获取我的 int 值,但忽略字符串大小写。

我刚刚发现,我可以使用带有IComparer 参数的Dictionary&lt;TKey,TValue&gt; 构造函数,而Dictionary 将使用它来比较键。

但我必须自己编写IComparer&lt;string&gt; 实现吗?

【问题讨论】:

  • 你的意思是 StringComparison.OrdinalIgnoreCase ? “如果您为 StringComparison 参数指定 StringComparison.OrdinalIgnoreCase 的值,还有一个静态 String.Compare(String, String, StringComparison) 方法执行不区分大小写的序数比较。”
  • 你是如何使用字典和比较器的?你有一些代码可以给我们看吗?

标签: c# dictionary .net-core icomparer


【解决方案1】:

是的,StringComparer 类提供了一组方便的 StringComparer 实例(实现了IComparer&lt;string&gt;),可以进行不区分大小写的比较:

  • CurrentCultureIgnoreCase
  • InvariantCultureIgnoreCase
  • OrdinalIgnoreCase

在不了解您的用例的情况下,我无法告诉您要使用哪个比较器。您需要考虑要在哪种文化(或不变的文化)中进行比较,或者是否需要简单的序数比较。


也就是说,Dictionary 不接受 IComparer,而是接受 IEqualityComparer... 但是您仍然可以使用 StringComparer,它还实现了 IEqualityComparer

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多