diff --git a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs index d8c0ae1..432bd88 100644 --- a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs +++ b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs @@ -653,14 +653,15 @@ namespace ICD.Common.Utils.Extensions } /// - /// Shim to + /// Gets distinct elements from the sequence based on given callbacks. /// /// /// /// + /// /// [PublicAPI] - public static IEnumerable Distinct(this IEnumerable extends, Func comparer) + public static IEnumerable Distinct(this IEnumerable extends, Func comparer, Func getHashCode) { if (extends == null) throw new ArgumentNullException("extends"); @@ -668,7 +669,7 @@ namespace ICD.Common.Utils.Extensions if (comparer == null) throw new ArgumentNullException("comparer"); - return extends.Distinct(new FuncComparer(comparer)); + return extends.Distinct(new FuncComparer(comparer, getHashCode)); } /// diff --git a/ICD.Common.Utils/FuncComparer.cs b/ICD.Common.Utils/FuncComparer.cs index c9bb76a..34b5894 100644 --- a/ICD.Common.Utils/FuncComparer.cs +++ b/ICD.Common.Utils/FuncComparer.cs @@ -10,14 +10,17 @@ namespace ICD.Common.Utils public sealed class FuncComparer : IEqualityComparer { private readonly Func m_Comparer; + private readonly Func m_GetHashCode; /// /// Constructor. /// /// - public FuncComparer(Func comparer) + /// + public FuncComparer(Func comparer, Func getHashCode) { m_Comparer = comparer; + m_GetHashCode = getHashCode; } public bool Equals(T x, T y) @@ -27,7 +30,7 @@ namespace ICD.Common.Utils public int GetHashCode(T obj) { - return obj.GetHashCode(); + return m_GetHashCode(obj); } } }