using System.Collections;
using System.Collections.Generic;
namespace ExtensionMethods
public static class MyExtensions
public static bool ContainsAll(this IEnumerable<int> items, IEnumerable<int> itemsToFind)
return itemsToFind.All(currentItem => items.Contains(currentItem));
public static bool HashSetContainsAll(this IEnumerable<int> items, IEnumerable<int> itemsToFind)
HashSet<int> hashSet = new HashSet<int>();
foreach (var item in items) hashSet.Add(item);
foreach (var item in itemsToFind) if (!hashSet.Contains(item)) return false;
class EnumerableSetofInt : IEnumerable<int>
public EnumerableSetofInt(int size)
integers = new int[size];
Random random = new Random();
for (int i = 1; i <= size; i++)
nextPos = random.Next(0, size-1);
nextPos = (nextPos < integers.Length-1) ? nextPos + 1 : 0
public IEnumerator<int> GetEnumerator()
return ((IEnumerable<int>)integers).GetEnumerator();
IEnumerator IEnumerable.GetEnumerator()
return ((IEnumerable<int>)integers).GetEnumerator();
public static long CurrentTimeMillis()
return (long)(DateTime.UtcNow - (new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc))).TotalMilliseconds;
public static void Main()
EnumerableSetofInt numbers = new EnumerableSetofInt(200000);
EnumerableSetofInt toFind = new EnumerableSetofInt(100000);
long currentTimeMillis = CurrentTimeMillis();
Console.WriteLine(numbers.ContainsAll(toFind) ? "Found them All" : "Not all were found");
Console.WriteLine("ContainsAll Took: " + (CurrentTimeMillis() - currentTimeMillis) + " milliseconds");
currentTimeMillis = CurrentTimeMillis();
Console.WriteLine(numbers.ContainsAll(toFind) ? "Found them All" : "Not all were found");
Console.WriteLine("GersonContainsAll Took:" + (CurrentTimeMillis() - currentTimeMillis) + " milliseconds");