diff MetroWpf/MetroWpf.Framework/Extensions/EnumerableExtensions.cs @ 15:060f02cd4591

Initial commit, pre airport work
author stevenh7776 stevenhollidge@hotmail.com
date Mon, 12 Mar 2012 23:05:21 +0800
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MetroWpf/MetroWpf.Framework/Extensions/EnumerableExtensions.cs	Mon Mar 12 23:05:21 2012 +0800
@@ -0,0 +1,57 @@
+using System;
+using System.Collections.Generic;
+
+namespace MetroWpf
+{
+    /// <summary>
+    /// Extension methods for all kinds of (typed) enumerable data (Array, List, ...)
+    /// </summary>
+    public static class EnumerableExtensions
+    {
+        #region · Extensions ·
+
+        /// <summary>
+        /// Converts all items of a list and returns them as enumerable.
+        /// </summary>
+        /// <typeparam name="TSource">The source data type</typeparam>
+        /// <typeparam name="TTarget">The target data type</typeparam>
+        /// <param name="source">The source data.</param>
+        /// <returns>The converted data</returns>
+        /// <example>
+        /// 
+        /// var values = new[] { "1", "2", "3" };
+        /// values.ConvertList&lt;string, int&gt;().ForEach(Console.WriteLine);
+        /// 
+        /// </example>
+        public static IEnumerable<TTarget> ConvertList<TSource, TTarget>(this IEnumerable<TSource> source)
+        {
+            foreach (var value in source)
+            {
+                yield return value.ConvertTo<TTarget>();
+            }
+        }
+
+        /// <summary>
+        /// Performs an action for each item in the enumerable
+        /// </summary>
+        /// <typeparam name="T">The enumerable data type</typeparam>
+        /// <param name="values">The data values.</param>
+        /// <param name="action">The action to be performed.</param>
+        /// <example>
+        /// 
+        /// var values = new[] { "1", "2", "3" };
+        /// values.ConvertList&lt;string, int&gt;().ForEach(Console.WriteLine);
+        /// 
+        /// </example>
+        /// <remarks>This method was intended to return the passed values to provide method chaining. Howver due to defered execution the compiler would actually never run the entire code at all.</remarks>
+        public static void ForEach<T>(this IEnumerable<T> values, Action<T> action)
+        {
+            foreach (var value in values)
+            {
+                action(value);
+            }
+        }
+
+        #endregion
+    }
+}
\ No newline at end of file