У мене є Dictionary<string, object>
словник. Раніше це було, Dictionary<Guid, object>
але інші «ідентифікатори» почали діяти, і тепер ключі обробляються як рядки.
Проблема в тому, що Guid
ключі з моїх вихідних даних надходять як VarChar
, тому зараз ключ "923D81A0-7B71-438d-8160-A524EA7EFA5E"
не є таким самим, як "923d81a0-7b71-438d-8160-a524ea7efa5e"
(не було проблемою при використанні посібників).
Що справді приємно (і солодко) у .NET framework, це те, що я можу зробити це:
Dictionary<string, CustomClass> _recordSet = new Dictionary<string, CustomClass>(
StringComparer.InvariantCultureIgnoreCase);
І це чудово працює. Але як щодо вкладеного словника? Як наступне:
Dictionary<int, Dictionary<string, CustomClass>> _customRecordSet
= new Dictionary<int, Dictionary<string, CustomClass>>();
Як я можу вказати порівняльник рядків у вкладеному словнику, як цей?
StringComparer.InvariantCultureIgnoreCase
. Цей порівняльник є повільним, оскільки він порівнює рядки за допомогою класів символів для подолання міжкультурних відмінностей. Це означає, що словоStraße
буде трактуватися як рівнеStrasse
і навпаки. Я припускаю, що ви не хочете такої поведінки, і якщо продуктивність має вирішальне значення (якщо ви реалізуєте щось на зразок шару кешу над базою даних), то вам було б краще використовуватиStringComparer.OrdinalIgnoreCase
. Порядковий порівняльник - це найшвидший порівняльник рядків, який може запропонувати платформа .NET.