andrew4582

KeyEqualityComparer

Jan 24th, 2013
278
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.88 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace Core
  7. {
  8.     /// <summary>
  9.     /// Generice impl of <see cref="IEqualityComparer"/>
  10.     /// </summary>
  11.     /// <example>
  12.     /// var treeComparer = new KeyEqualityComparer<TreeDefinition, int?>((t) => t.TreeID);
  13.     /// </example>
  14.     /// <typeparam name="T">The type of object comparing</typeparam>
  15.     /// <typeparam name="TKey">The type of key comparing</typeparam>
  16.     public class KeyEqualityComparer<T, TKey> : IEqualityComparer<T>
  17.     {
  18.         protected readonly Func<T, TKey> keyExtractor;
  19.  
  20.         public KeyEqualityComparer(Func<T, TKey> keyExtractor)
  21.         {
  22.             this.keyExtractor = keyExtractor;
  23.         }
  24.  
  25.         public virtual bool Equals(T x, T y)
  26.         {
  27.             return this.keyExtractor(x).Equals(this.keyExtractor(y));
  28.         }
  29.  
  30.         public int GetHashCode(T obj)
  31.         {
  32.             return this.keyExtractor(obj).GetHashCode();
  33.         }
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment