I have a Dictionary<string, object>
dictionary. It used to be Dictionary<Guid, object>
but other 'identifiers' have come into play and the Keys are now handled as strings.
The issue is that the Guid
keys from my source data are coming as VarChar
, so now a key of "923D81A0-7B71-438d-8160-A524EA7EFA5E"
is not the same as "923d81a0-7b71-438d-8160-a524ea7efa5e"
(wasn't a problem when using Guids).
What's really nice (and sweet) about the .NET framework is that I can do this:
Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>(
StringComparer.InvariantCultureIgnoreCase);
And that works great. But what about a nested Dictionary? Like the following:
Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet
= new Dictionary<int, Dictionary<string, CustomClass>>();
How would I specify the string comparer on a nested dictionary like this?
When you add an element to the outer dictionary, you'll likely create a new instance of the nested dictionary, add it at this point, making use of the overloaded constructor that takes an IEqualityComparer<TKey>
.
_customRecordSet.Add(0, new Dictionary<string, CustomClass>(StringComparer.InvariantCultureIgnoreCase));
Update 08/03/2017: Anecdotally, I read somewhere (I think in "Writing High-Performance .NET Code") that StringComparer.OrdinalIgnoreCase
is more efficient when simply wanting to disregard the case of characters. This, however, is entirely unfounded by myself so YMMV.