Нужно сделать так, что бы при добавлении в словарь нового элемента (тип ключа - string), и если в словаре уже существует такой же ключ (неважно будут ли у него некоторые символы в других регистрах), словарь должен воспринимать его как один и тот же ключ. Как это можно реализовать?
Из урока Александра Шевчука я вынес следующее: для Hashtable в конструктор можно передать экземпляр реализующий интерфейс IEqualityComparer, который и будет определять существует ли такой ключ в словаре или нет.
Пример с того же урока:
public class InsensitiveComparer : IEqualityComparer
{
readonly CaseInsensitiveComparer comparer = new CaseInsensitiveComparer();
public int GetHashCode(object obj)
{
return obj.ToString().ToLowerInvariant().GetHashCode();
}
public new bool Equals(object x, object y)
{
return comparer.Compare(x, y) == 0;
}
}
static void Main()
{
// Создаем коллекцию не чувствительную к регистру символов.
var dehash = new Hashtable(new InsensitiveComparer());
dehash["First"] = "1st";
dehash["Second"] = "2nd";
dehash["Third"] = "3rd";
dehash["Fourth"] = "4th";
dehash["fourth"] = "4TH!!!";
Console.WriteLine(dehash.Count);
// Delay.
Console.ReadKey();
}
если же Вы будете в качестве ключа использовать не строки, а экземпляры других классов, то переопределите в них Equals и GetHashCode
спасибо!