为什么我不能在C#中定义不区分大小写的Dictionary?

时间:2010-03-22 10:31:05

标签: c# dictionary case-insensitive

这个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)'   有一些无效的论点

但我发现此代码示例无处不在,例如 here here

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

4 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:8)

更改

StringComparison.InvariantCultureIgnoreCase

 StringComparer.InvariantCultureIgnoreCase

答案 2 :(得分:3)

传递StringComparer.InvariantCultureIgnoreCase。注意StringCompar er 不是StringCompar ison

更一般地说,Dictionary<TKey, TValue>构造函数可以使用IComparer<TKey>类型的参数。正如Jon所说,StringComparison是一个枚举。但StringComparer提供了IComparer<string>的一些“预制”实现,而后者则是你需要的。

答案 3 :(得分:1)

这适用于我的电脑:

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