Я прочитав це запитання про те, чому це неможливо, але не знайшов рішення проблеми.
Я хотів би отримати елемент із .NET HashSet<T>. Я шукаю метод, який мав би такий підпис:
/// <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);
Пошук набору предмета таким методом буде O (1). Єдиний спосіб отримати елемент з a HashSet<T>- це перерахувати всі елементи, які мають значення O (n).
Я не знайшов жодного способу вирішення цієї проблеми, окрім того, щоб зробити свій власний HashSet<T>або використовувати Dictionary<K, V>. Будь-яка інша ідея?
Примітка:
Я не хочу перевіряти, чи HashSet<T>містить елемент. Я хочу отримати посилання на елемент, який зберігається в HashSet<T>тому, що мені потрібно його оновити (без заміни іншим екземпляром). Елемент, який я передав TryGetItemби, буде рівним (відповідно до механізму порівняння, який я передав конструктору), але це не буде однаковим посиланням.