public static ImmutableHashSet <T> IntersectSet <T>(this ImmutableHashSet <T> set1, ImmutableHashSet <T> set2)
        {
            if (set1.IsEmpty || set2.IsEmpty)
            {
                return(ImmutableHashSet <T> .Empty);
            }
            else if (set1.Count == 1)
            {
                return(set2.Contains(set1.First()) ? set1 : ImmutableHashSet <T> .Empty);
            }
            else if (set2.Count == 1)
            {
                return(set1.Contains(set2.First()) ? set2 : ImmutableHashSet <T> .Empty);
            }

            var builder = PooledHashSet <T> .GetInstance();

            foreach (var item in set1)
            {
                if (set2.Contains(item))
                {
                    builder.Add(item);
                }
            }

            if (builder.Count == set1.Count)
            {
                builder.Free();
                return(set1);
            }
            else if (builder.Count == set2.Count)
            {
                builder.Free();
                return(set2);
            }

            return(builder.ToImmutableAndFree());
        }