Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static IEnumerable<T> Distinct<T, TKey>(this IEnumerable<T> items, Func<T, TKey> keySelector, IEqualityComparer<TKey> comparer)
- {
- return items.Distinct(new KeyEqualityComparer<T, TKey>(keySelector, comparer.Equals));
- }
- class KeyEqualityComparer<T, TResult>: IEqualityComparer<T>
- {
- private readonly Func<T, TResult> _KeySelector;
- private readonly Func<TResult, TResult, bool> _Predicate;
- public KeyEqualityComparer(Func<T, TResult> keySelector, Func<TResult, TResult, bool> predicate)
- {
- if (keySelector == null)
- throw new ArgumentNullException("keySelector");
- _KeySelector = keySelector;
- _Predicate = predicate ?? System.Collections.Generic.EqualityComparer<TResult>.Default.Equals;
- }
- public bool Equals(T x, T y)
- {
- return _Predicate(_KeySelector(x), _KeySelector(y));
- }
- public int GetHashCode(T obj)
- {
- // Always return the same value to force the call to IEqualityComparer<T>.Equals
- return 0;
- }
- }
- // TODO: Use C# 6 primary constructor and read-only autoprops :)
- public class Person
- {
- public string Name { get; set; }
- public string Hobby { get; set; }
- public string Profession { get; set; }
- }
- var people = new List<Person>
- {
- new Person { Name="Tom", Hobby="Minecraft", Profession = "Student" },
- new Person { Name="Robin", Hobby="Taunting", Profession = "Outlaw" },
- new Person { Name="Robin", Hobby="Angry Birds", Profession = "Student" },
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement