Eu li esta pergunta sobre por que isso não é possível, mas não encontrei uma solução para o problema.
Eu gostaria de recuperar um item de um .net HashSet<T>
. Estou procurando um método que teria esta assinatura:
/// <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);
Pesquisar o conjunto para um item com tal método seria O (1). A única maneira de recuperar um item de a HashSet<T>
é enumerar todos os itens que são O (n).
Eu não encontrei nenhuma solução alternativa para este problema além de criar meu próprio HashSet<T>
ou usar um Dictionary<K, V>
. Alguma outra ideia?
Observação:
não quero verificar se HashSet<T>
contém o item. Desejo obter a referência do item armazenado no HashSet<T>
porque preciso atualizá-lo (sem substituí-lo por outra instância). O item que eu passaria para TryGetItem
seria igual (de acordo com o mecanismo de comparação que passei para o construtor), mas não seria a mesma referência.