public void TestEnumerableExtensions() { // Typenames { object[] values1 = new object[] { "Hello", 1, 2.5f }; Type[] values1Types = new Type[] { typeof(string), typeof(int), typeof(float), }; Assert.AreEqual(new string[] { values1Types[0].Name, values1Types[1].Name, values1Types[2].Name, }, values1.TypeNames()); Assert.AreEqual(new string[] { values1Types[0].Name, values1Types[1].Name, values1Types[2].Name, }, values1Types.TypeNames()); } // Names { string a = "ABCD", b = "EDFG"; TestDataObject[] values = new TestDataObject[] { new TestDataObject(a, 1), new TestDataObject(b, 2), }; Assert.AreEqual(new string[] { a, b, }, values.ToStringArray()); Assert.AreEqual(new string[] { a, b, }, values.ToStringArray(x => x.name)); } // Duplicate Keys { int[] values = new int[] { 1, 2, 3, 3, 4 }; Assert.True(values.HasDuplicateKeys()); Assert.AreEqual(3, values.FindFirstDuplicate()); } // Null { string a = "Hello", b = "Goodbye"; string[] values = new string[] { a, null, b }; Assert.AreEqual(new string[] { a, b }, values.TruncateNull()); } // ForEach { int a = 1, b = 2, c = 3; int[] values = new int[] { a, b, c }; List <int> values2 = new List <int>(); values.ForEach((x) => values2.Add(x + 1)); Assert.AreEqual(new int[] { a + 1, b + 1, c + 1 }, values2.ToArray()); } // Find First { string a = "12", b = "34", c = "56"; string[] values = new string[] { a, b, c }; Assert.AreEqual(b, values.FindFirst(x => x.Contains("3"))); } // Clone { int[] original = new int[] { 1, 2, 3, 4, 5 }; int[] copy = (int[])original.Clone(); Assert.AreNotSame(original, copy); } // Min/Max/Sum { { int[] values = new int[] { 1, 3, 5, 7, 9 }; Assert.AreEqual(1, values.Min()); Assert.AreEqual(9, values.Max()); Assert.AreEqual(1 + 3 + 5 + 7 + 9, values.Sum()); } { TestDataObject min = new TestDataObject("A", 1); TestDataObject max = new TestDataObject("D", 12); Func <TestDataObject, int> selector = (x) => x.value; TestDataObject[] values = new TestDataObject[] { new TestDataObject("B", 3), min, new TestDataObject("C", 6), max, new TestDataObject("E", 5), }; Assert.AreEqual(min.value, values.Min(selector)); Assert.AreEqual(max.value, values.Max(selector)); Assert.AreEqual(min, values.SelectMin(selector)); Assert.AreEqual(max, values.SelectMax(selector)); } } // To Dictionary { string a = "A", b = "B", c = "C"; TestDataObject[] values = new TestDataObject[] { new TestDataObject(a, 1), new TestDataObject(b, 2), new TestDataObject(c, 3), }; Dictionary <string, TestDataObject> dict = values.ToDictionary <string, TestDataObject>((x) => x.name); Assert.AreEqual(3, dict.Count); Assert.AreEqual(1, dict[a].value); Assert.AreEqual(2, dict[b].value); Assert.AreEqual(3, dict[c].value); } // Convert { int[] a = new int[] { 1, 2, 3, }; string[] b = a.ToArray <int, string>((x) => x.ToString()); Assert.AreEqual(new string[] { "1", "2", "3" }, b); } }