Вы можете использовать List<T>.Contains
- просто знайте, что это будет линейный поиск, т. Е. O (N) вместо O (1) из HashMap
. Если ваш список не слишком большой, вряд ли это будет большой проблемой. Конечно, вам все еще нужно, чтобы элементы переопределяли Equals
соответствующим образом, если вы не удовлетворены ссылочной идентификацией.
Если у вас есть большой список, для которого вам нужно будет выполнять повторные проверки содержимого, вы можете просто создать HashSet<T>
из существующего списка. Если вы собираетесь много манипулировать списком по ходу дела, вы можете инкапсулировать как список, так и набор в свою собственную коллекцию. Вам нужно будет решить, какую семантику вы хотите - что бы вы хотели, если бы вы добавили один и тот же идентификатор дважды? Следует ли игнорировать второй вызов? Если вы можете уйти, не делая этого, тем лучше:)