c#字典:通过声明使关键字不区分大小写

我有一个Dictionary<string, object>字典。 它曾经是Dictionary<Guid, object>但其他的“标识符”已经发挥作用,现在键被处理为string。

问题是我的源数据中的Guid键是作为VarChar ,所以现在"923D81A0-7B71-438d-8160-A524EA7EFA5E"的键与"923d81a0-7b71-438d-8160-a524ea7efa5e" (wasn使用Guids时不会出现问题)。

关于.NET框架的真正好(和甜)是我可以这样做:

 Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>( StringComparer.InvariantCultureIgnoreCase); 

那效果很好。 但是,嵌套的字典呢? 如下所示:

 Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet = new Dictionary<int, Dictionary<string, CustomClass>>(); 

我将如何指定这样的嵌套字典string比较器?

将元素添加到外部字典时,可能会创build嵌套字典的新实例,并在此处添加它,从而使用带有IEqualityComparer<TKey>的重载构造函数 。

_customRecordSet.Add(0, new Dictionary<string, CustomClass>(StringComparer.InvariantCultureIgnoreCase));


更新08/03/2017:有趣的是,我读了一些地方(我认为在“编写高性能的.NET代码”), StringComparer.OrdinalIgnoreCase是更有效的时候,只是想忽略字符的情况。 然而,这是YMMV自己完全没有根据的。

你将不得不初始化嵌套字典才能使用它们。 只要使用上面的代码即可。

基本上,你应该有这样的代码:

 public void insert(int int_key, string guid, CustomClass obj) { if (_customRecordSet.ContainsKey(int_key) _customRecordSet[int_key][guid] = obj; else { _customRecordSet[int_key] = new Dictionary<string, CustomClass> (StringComparer.InvariantCultureIgnoreCase); _customRecordSet[int_key][guid] = obj; } }