c# Dictionary: making the Key case-insensitive through declarations

c#, case-insensitive, dictionary

Solution

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.

Problem

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?

Original source

Related problems