diff --git a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs index d28fe0a..d8c0ae1 100644 --- a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs +++ b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs @@ -643,6 +643,7 @@ namespace ICD.Common.Utils.Extensions /// /// /// + [PublicAPI] public static Dictionary ToDictionary(this IEnumerable> extends) { if (extends == null) @@ -651,6 +652,25 @@ namespace ICD.Common.Utils.Extensions return extends.ToDictionary(x => x.Key, x => x.Value); } + /// + /// Shim to + /// + /// + /// + /// + /// + [PublicAPI] + public static IEnumerable Distinct(this IEnumerable extends, Func comparer) + { + if (extends == null) + throw new ArgumentNullException("extends"); + + if (comparer == null) + throw new ArgumentNullException("comparer"); + + return extends.Distinct(new FuncComparer(comparer)); + } + /// /// Returns other if the sequence is empty. /// Returns other if the sequence is non-empty and there are two different elements. diff --git a/ICD.Common.Utils/FuncComparer.cs b/ICD.Common.Utils/FuncComparer.cs new file mode 100644 index 0000000..c9bb76a --- /dev/null +++ b/ICD.Common.Utils/FuncComparer.cs @@ -0,0 +1,33 @@ +using System; +using System.Collections.Generic; + +namespace ICD.Common.Utils +{ + /// + /// Simple comparer for comparing items using a callback. + /// + /// + public sealed class FuncComparer : IEqualityComparer + { + private readonly Func m_Comparer; + + /// + /// Constructor. + /// + /// + public FuncComparer(Func comparer) + { + m_Comparer = comparer; + } + + public bool Equals(T x, T y) + { + return m_Comparer(x, y); + } + + public int GetHashCode(T obj) + { + return obj.GetHashCode(); + } + } +} diff --git a/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj b/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj index e6a5e80..966b40e 100644 --- a/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj +++ b/ICD.Common.Utils/ICD.Common.Utils_SimplSharp.csproj @@ -87,6 +87,7 @@ +