这个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 。
如何定义其键不区分大小写的词典?
答案 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 ).