2015-08-23 2 views
1

Допустим, у нас есть класс SomeObject со многими полями и хранения экземпляров в HashSet. Для содержимого HashSet требуется только одно поле: int ID, поэтому мы переопределили методы GetHashCode() и Equals().HashSet of SomeObjects и содержит функцию с аргументом int

И теперь мой вопрос: можем ли мы каким-то образом использовать hashSet.Contains (someIntVariable) вместо создания целого нового объекта типа SomeObject? Я имею в виду, если важно только поле int, можно ли использовать функцию Contains с заданным аргументом int?

Мне нужно, чтобы проверить, существует ли объект, и не хотите создать весь образец объекта.

+0

Почему бы не сохранить идентификаторы в 'HashSet' вместо этого? –

+0

и что тогда? Мне все еще нужны объекты, поэтому мне нужно было бы сделать 2 HashSets один для ID, а второй для объектов – Arrekin

+0

Что вы на самом деле делаете с этим набором хэшей? –

ответ

0

HashSet К сожалению, не имеет возможности поиска по различным объектам и получить то, что хранится. Эта возможность теоретически может существовать и, возможно, вы можете найти библиотеку коллекций в Интернете, которая это делает.

Лучший обходной путь:

Создать отдельный ключ-структуру (например, MyKey) и использовать Dictionary<MyKey, MyValue>. Таким образом, вы можете создать ключ без создания объекта.

В качестве альтернативы вы можете создать структуру-оболочку, которая инкапсулирует либо ключ, либо весь объект. Вы можете, чем дешево, создать экземпляр этой структуры и передать ее на номер HashSet. Я считаю, что это сложнее первой идеи.

Смежные вопросы