Leí esta pregunta sobre por qué no es posible, pero no he encontrado una solución al problema.
Me gustaría recuperar un elemento de .NET HashSet<T>
. Estoy buscando un método que tenga esta 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);
Buscar en el conjunto un artículo con tal método sería O (1). La única forma de recuperar un elemento de a HashSet<T>
es enumerar todos los elementos que son O (n).
No he encontrado ninguna solución a este problema que no sea hacer la mía propia HashSet<T>
o usar un archivo Dictionary<K, V>
. ¿Alguna otra idea?
Nota:
No quiero comprobar si HashSet<T>
contiene el artículo. Quiero obtener la referencia al elemento que está almacenado en HashSet<T>
porque necesito actualizarlo (sin reemplazarlo por otra instancia). El elemento que le pasaría TryGetItem
sería igual (según el mecanismo de comparación que le pasé al constructor) pero no sería la misma referencia.