using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace DominionBase { public static class Compare { public static IEnumerable DistinctBy(this IEnumerable source, Func identitySelector) { return source.Distinct(By(identitySelector)); } public static IEqualityComparer By(Func identitySelector) { return new DelegateComparer(identitySelector); } private class DelegateComparer : IEqualityComparer { private readonly Func identitySelector; public DelegateComparer(Func identitySelector) { this.identitySelector = identitySelector; } public bool Equals(T x, T y) { return Equals(identitySelector(x), identitySelector(y)); } public int GetHashCode(T obj) { return identitySelector(obj).GetHashCode(); } } } }