У меня проблема. Кажется, я не могу оборачивать голову. Я создаю класс для хранения словаря предметов, которые имеют общие типы. Проблема, с которой я столкнулся, необходима, чтобы заставить этот словарь быть InvariantCultureIgnoreCase
, если Тип индекса - это строка.Общее сравнение словарей
Например:
public class Cache<TIndex, TItem>
{
protected IDictionary<TIndex, TItem> _cache { get; set; }
public Cache()
{
this._cache = new Dictionary<TIndex, TItem>();
}
public bool Exists(TIndex index)
{
if (!_cache.ContainsKey(index))
{
//....do other stuff here
this._cache.Add(databaseResult.Key, databaseResult.Value);
return false;
}
return true;
}
}
Итак, первая проблема имеет дело со строками, которые имели различную капитализацию; Я решил это, заставив данные быть в верхнем регистре. Теперь, однако, я обнаружил, что есть некоторые символы, которые являются специфическими для культуры, поэтому без переключения инвариантной культуры ContainsKey
вернет false.
Я пробовал создать новый IEqualityComparer
, но это никогда не срабатывает. Есть идеи?
Код, который вы показали, ничего не показывает о 'IEqualityComparer'. Я подозреваю, что вам просто нужно разрешить 'IEqualityComparer' быть переданным в конструктор и предоставленным в словарь. –
«Я попытался создать новый IEquityComparer, но это никогда не срабатывает». Вы только что создали его? Или вы действительно назначили его в словарь? – Tim
Я пробовал это раньше; Я назначил его в конструкторе, но он никогда не срабатывает. – brenton