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()); }