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; } }