【问题标题】:Why can't I define a case-insensitve Dictionary in C#?为什么我不能在 C# 中定义不区分大小写的字典?
【发布时间】:2010-03-22 10:31:05
【问题描述】:

这个 C#/WPF 代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace TestDict28342343
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            Dictionary<string, string> variableNamesAndValues = 
                new Dictionary<string, string>(StringComparison.InvariantCultureIgnoreCase);

        }
    }
}

给我错误

最好的重载方法匹配 'System.Collections.Generic.Dictionary.Dictionary(System.Collections.Generic.IDictionary)' 有一些无效的参数

但我发现这个代码示例无处不在,例如 herehere

如何定义不区分大小写键的字典?

【问题讨论】:

    标签: c# dictionary case-insensitive


    【解决方案1】:

    您正在尝试使用StringComparison,它是一个枚举。您应该改用StringComparer.InvariantCultureIgnoreCase - 这是一个返回StringComparer 的属性,它实现了IEqualityComparer&lt;string&gt;。然后,您将最终调用 Dictionary&lt;,&gt; constructor overload accepting an IEqualityComparer&lt;TKey&gt;,它可以用来检查相等性并生成哈希码。

    【讨论】:

      【解决方案2】:

      传递 StringComparer.InvariantCultureIgnoreCase。注意 StringComparer 不是 StringComparison

      更一般地,Dictionary&lt;TKey, TValue&gt; 构造函数可以接受IComparer&lt;TKey&gt; 类型的参数。正如 Jon 所说,StringComparison 是一个枚举。但是 StringComparer 提供了一些 IComparer&lt;string&gt; 的“固定”实现,而您需要的是后者。

      【讨论】:

        【解决方案3】:

        这适用于我的电脑:

        Dictionary<string, string> dic = new Dictionary<string, string>( StringComparer.InvariantCultureIgnoreCase ).
        

        【讨论】:

          猜你喜欢
          • 2020-02-18
          • 2017-12-01
          • 2018-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多