diff --git a/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs b/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs new file mode 100644 index 0000000..d2244e4 --- /dev/null +++ b/ICD.Common.Utils.Tests/Extensions/EnumerableExtensionsTest.cs @@ -0,0 +1,21 @@ +using ICD.Common.Utils.Extensions; +using NUnit.Framework; +using System.Linq; + +namespace ICD.Common.Utils.Tests_NetStandard.Extensions +{ + [TestFixture] + public sealed class EnumerableExtensionsTest + { + [Test] + public void ConsolidateTest() + { + string[] sequence = EnumerableExtensions.Consolidate(new string[] { "A", "B", "B", "C" }).ToArray(); + + Assert.AreEqual(3, sequence.Length, StringUtils.ArrayFormat(sequence)); + Assert.AreEqual("A", sequence[0]); + Assert.AreEqual("B", sequence[1]); + Assert.AreEqual("C", sequence[2]); + } + } +} diff --git a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs index cdf343b..80e23df 100644 --- a/ICD.Common.Utils/Extensions/EnumerableExtensions.cs +++ b/ICD.Common.Utils/Extensions/EnumerableExtensions.cs @@ -644,7 +644,7 @@ namespace ICD.Common.Utils.Extensions /// /// [PublicAPI] - public static IEnumerable Consolidate(IEnumerable extends) + public static IEnumerable Consolidate(this IEnumerable extends) { if (extends == null) throw new ArgumentNullException("extends"); @@ -664,7 +664,7 @@ namespace ICD.Common.Utils.Extensions /// /// [PublicAPI] - public static IEnumerable Consolidate(IEnumerable extends, IComparer comparer) + public static IEnumerable Consolidate(this IEnumerable extends, IComparer comparer) { if (extends == null) throw new ArgumentNullException("extends"); @@ -677,7 +677,7 @@ namespace ICD.Common.Utils.Extensions foreach (T item in extends) { - if (!first && comparer.Compare(last, item) != 0) + if (!first && comparer.Compare(last, item) == 0) continue; first = false; diff --git a/ICD.Common.Utils/StringUtils.cs b/ICD.Common.Utils/StringUtils.cs index 4a18951..8a27161 100644 --- a/ICD.Common.Utils/StringUtils.cs +++ b/ICD.Common.Utils/StringUtils.cs @@ -115,6 +115,16 @@ namespace ICD.Common.Utils return string.Join("", strings); } + /// + /// Uses String.Format to properly handle null values. + /// + /// + /// + public static string ToString(object value) + { + return string.Format("{0}", value); + } + /// /// Converts bytes to an ascii string. /// @@ -360,7 +370,7 @@ namespace ICD.Common.Utils if (items == null) throw new ArgumentNullException("items"); - return string.Format("[{0}]", string.Join(", ", items.Select(i => i.ToString()).ToArray())); + return string.Format("[{0}]", string.Join(", ", items.Select(i => ToString(i)).ToArray())); } /// @@ -377,7 +387,7 @@ namespace ICD.Common.Utils string[] ranges = MathUtils.GetRanges(items) .Select(r => r[0] == r[1] - ? r[0].ToString() + ? ToString(r[0]) : string.Format("{0}-{1}", r[0], r[1])) .ToArray();