Нет встроенного класса, подобного HashSet<T>
, за исключением этого единственного поведения.
Если вам это нужно, я бы порекомендовал прокатить свой. Однако я не рекомендую создавать подклассы HashSet<T>
. Ни один из методов (например, Add
, который вы явно хотите изменить) не является виртуальным, поскольку он не был разработан с учетом подклассов. Это приведет к странному поведению при использовании, так как вы будете скрывать унаследованные методы.
Просто заключите в капсулу HashSet<T>
и покажите нужных вам членов. Единственный реальный «код», который вам нужно добавить, - это одиночная проверка на метод Add на пустое значение, в противном случае просто передайте все методы инкапсулированному экземпляру.
Если вы хотите, чтобы это был общий класс, вам нужно добавить дополнительное ограничение, чтобы работать только с классами, поскольку вы хотите иметь нулевую проверку:
public class ValueSet<T> : ICollection<T>, IEnumerable<T>, ICollection
where T : class
{
private HashSet<T> hashSet = new HashSet<T>();
// ... Implement all members as needed...