Подтвердить что ты не робот

Проверяет ли Linq() флажок для HashSet?

Иногда HashSet отображается через свойство как IEnumerable.

Хорошо известно, что для enumerable.Count() код проверяет, является ли он коллекцией, поэтому он не перечисляет весь список, а принимает ярлык.

Есть ли аналогичная проверка для использования версии Linq enumerable.Contains(x) и HashSets?

4b9b3361

Ответ 1

Из справочного источника да, но это не так:

public static bool Contains<TSource>(this IEnumerable<TSource> source, TSource value) {
    ICollection<TSource> collection = source as ICollection<TSource>;
    if (collection != null) return collection.Contains(value);
    return Contains<TSource>(source, value, null);
}

Если источник перечислит реализует ICollection<T>HashSet<T>), то он использует метод коллекции Contains.

Ответ 2

Обратите внимание, что документально искать ICollection<T> (см. примечания).