Как получить фактический элемент из HashSet ?

Я прочитал этот вопрос о том, почему это невозможно, но не нашел решения проблемы.

Я хотел бы получить элемент из .NET HashSet . Я ищу метод, который имел бы такую ​​сигнатуру:

/// 
/// Determines if this set contains an item equal to , 
/// according to the comparison mechanism that was used when the set was created. 
/// The set is not changed. If the set does contain an item equal to 
/// , then the item from the set is returned.
/// 
bool TryGetItem(T item, out T foundItem);

Поиск в наборе элемента с таким методом был бы O (1). Единственный способ получить элемент из HashSet - это перечислить все элементы, равные O (n).

Я не нашел никакого решения этой проблемы, кроме как создать свой собственный HashSet или использовать Dictionary . Есть еще идеи?

Примечание:
Я не хочу проверять, содержит ли HashSet элемент. Я хочу получить ссылку на элемент, который хранится в HashSet , потому что мне нужно обновить его (без замены другим экземпляром). Элемент, который я передал бы в TryGetItem , был бы равен (в соответствии с механизмом сравнения, который я передал конструктору), но это не будет та же ссылка.

77
задан Community 23 May 2017 в 12:26
поделиться