HashSet не нужен IComparer<T>
- ему нужен IEqualityComparer<T>
, например
public class SynonymComparer : IEqualityComparer<Synonym>
{
public bool Equals(Synonym one, Synonym two)
{
// Adjust according to requirements.
return StringComparer.InvariantCultureIgnoreCase
.Equals(one.Name, two.Name);
}
public int GetHashCode(Synonym item)
{
return StringComparer.InvariantCultureIgnoreCase
.GetHashCode(item.Name);
}
}
Однако ваш текущий код компилируется только потому, что вы создаете набор компараторов , а не набор синонимов .
Кроме того, я не думаю, что вы действительно хотите сет вообще. Мне кажется, что вам нужен словарь или справочник, чтобы вы могли найти синонимы для данного имени:
public class SynonymManager
{
private readonly IDictionary<string, Synonym> synonyms = new
Dictionary<string, Synonym>();
private void Add(Synonym synonym)
{
// This will overwrite any existing synonym with the same name.
synonyms[synonym.Name] = synonym;
}
public void SomeFunction()
{
// Just a function to add 2 synonyms to 1 stock.
Stock stock = GetStock("General Motors");
Synonym otherName = new Synonym("GM", stock);
Add(otherName);
ListOfSynonyms.Add(otherName);
otherName = new Synonym("Gen. Motors", stock);
Add(otherName);
}
public Synonym Find(string nameSynonym)
{
// This will throw an exception if you don't have
// a synonym of the right name. Do you want that?
return synonyms[nameSynonym];
}
}
Обратите внимание, что в приведенном выше коде есть несколько вопросов о том, как вы хотите, чтобы он вел себя в различных случаях. Вам нужно выработать в точности то, что вы хотите, чтобы он делал.
РЕДАКТИРОВАТЬ: Если вы хотите иметь возможность хранить несколько акций для одного синонима, вы эффективно хотите Lookup<string, Stock>
- но это неизменно. Вы, вероятно, лучше всего храните Dictionary<string, List<Stock>>
; список акций для каждой строки.
С точки зрения того, чтобы не выдавать ошибку из Find
, вы должны посмотреть на Dictionary.TryGetValue
, который не выдает исключение, если ключ не найден (и также возвращает, был ли ключ был найдено); сопоставленное значение «возвращается» в выходном параметре.