using System.Collections.Generic;
public static void Main()
Console.WriteLine("GetObjects(Type):");
Console.WriteLine(GetObjects(typeof(Foo)));
Console.WriteLine("GetObjects<Type>():");
Console.WriteLine(GetObjects<Bar>());
var x = new Quux { a = 1, b = 2 };
var y = new Quux { a = 1, b = 2 };
var z = new Quux { a = 3, b = 4 };
var qs = new Quux[] { x };
Console.WriteLine("array contains:");
Console.WriteLine(qs.Contains(y));
Console.WriteLine(qs.Contains(z));
Console.WriteLine("array contains (with comparer):");
Console.WriteLine(qs.Contains(y, new QuuxComparer()));
Console.WriteLine(qs.Contains(z, new QuuxComparer()));
var qsh = qs.ToHashSet();
Console.WriteLine("hashset contains:");
Console.WriteLine(qsh.Contains(y));
Console.WriteLine(qsh.Contains(z));
Console.WriteLine("hashset contains (with comparer):");
Console.WriteLine(qsh.Contains(y, new QuuxComparer()));
Console.WriteLine(qsh.Contains(z, new QuuxComparer()));
class QuuxComparer : IEqualityComparer<Quux>
public bool Equals(Quux q1, Quux q2)
public int GetHashCode(Quux q)
return q.a.GetHashCode() * 17 + q.b.GetHashCode();
public static object[] GetObjects(Type t)
public static IEnumerable<T> GetObjects<T>()
return GetObjects(typeof(T)).Cast<T>();