7

这个 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

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

4

3 回答 3

20

您正在尝试使用StringComparison,这是一个枚举。您应该StringComparer.InvariantCultureIgnoreCase改用 - 这是一个返回 a 的属性StringComparer,它实现了IEqualityComparer<string>. 然后,您将最终调用Dictionary<,>构造函数重载,并接受IEqualityComparer<TKey>它可以用来检查相等性并生成哈希码。

于 2010-03-22T10:33:50.660 回答
3

通过 StringComparer.InvariantCultureIgnoreCase。注意StringCompar不是StringCompar

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

于 2010-03-22T10:33:54.127 回答
1

这适用于我的电脑:

Dictionary<string, string> dic = new Dictionary<string, string>( StringComparer.InvariantCultureIgnoreCase ).
于 2010-03-22T10:35:11.517 回答