Ho letto questa domanda sul perché non è possibile, ma non ho trovato una soluzione al problema.
Vorrei recuperare un elemento da un .NET HashSet<T>. Sto cercando un metodo che abbia questa firma:
/// <summary>
/// Determines if this set contains an item equal to <paramref name="item"/>,
/// 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
/// <paramref name="item"/>, then the item from the set is returned.
/// </summary>
bool TryGetItem<T>(T item, out T foundItem);
La ricerca del set per un elemento con un tale metodo sarebbe O (1). L'unico modo per recuperare un elemento da a HashSet<T>è enumerare tutti gli elementi che è O (n).
Non ho trovato alcuna soluzione a questo problema se non crearne uno mio HashSet<T>o utilizzare un file Dictionary<K, V>. Qualche altra idea?
Nota:
non voglio controllare se HashSet<T>contiene l'elemento. Voglio ottenere il riferimento all'elemento memorizzato in HashSet<T>perché ho bisogno di aggiornarlo (senza sostituirlo con un'altra istanza). L'oggetto a cui passerei TryGetItemsarebbe uguale (secondo il meccanismo di confronto che ho passato al costruttore) ma non sarebbe lo stesso riferimento.