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

这个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 variableNamesAndValues = new Dictionary(StringComparison.InvariantCultureIgnoreCase); } } } 

给我错误

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

然而,我在这里这里找到了这个代码示例。

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

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

更改

 StringComparison.InvariantCultureIgnoreCase 

  StringComparer.InvariantCultureIgnoreCase 

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

更一般地, Dictionary构造函数可以采用IComparer类型的参数。 正如Jon所说,StringComparison是一个枚举。 但是StringComparer提供了IComparer一些“固定”实现,而后者是你需要的。

这适用于我的电脑:

 Dictionary dic = new Dictionary( StringComparer.InvariantCultureIgnoreCase ).