using System; using System.Collections.Generic; namespace Open.RandomizationExtensions; class DeferredHashSet : HashSet, IDisposable { public DeferredHashSet(IEnumerator source) => Source = source ?? throw new ArgumentNullException(nameof(source)); public DeferredHashSet(IEnumerable source) : this((source ?? throw new ArgumentNullException(nameof(source))).GetEnumerator()) { } private readonly IEnumerator Source; public new bool Contains(T item) { if (base.Contains(item)) return true; while (Source.MoveNext()) { var i = Source.Current; _ = Add(i); if (item is null ? i is null : item.Equals(i)) return true; } return false; } public void Dispose() { Source.Dispose(); Clear(); } }