diff options
Diffstat (limited to 'Xamarin.Forms.Core/EnumerableExtensions.cs')
-rw-r--r-- | Xamarin.Forms.Core/EnumerableExtensions.cs | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/Xamarin.Forms.Core/EnumerableExtensions.cs b/Xamarin.Forms.Core/EnumerableExtensions.cs new file mode 100644 index 00000000..066e7e91 --- /dev/null +++ b/Xamarin.Forms.Core/EnumerableExtensions.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections.Generic; + +namespace Xamarin.Forms +{ + internal static class EnumerableExtensions + { + public static IEnumerable<T> GetGesturesFor<T>(this IEnumerable<IGestureRecognizer> gestures, Func<T, bool> predicate = null) where T : GestureRecognizer + { + if (gestures == null) + yield break; + + if (predicate == null) + predicate = x => true; + + foreach (IGestureRecognizer item in gestures) + { + var gesture = item as T; + if (gesture != null && predicate(gesture)) + { + yield return gesture; + } + } + } + + internal static IEnumerable<T> Append<T>(this IEnumerable<T> enumerable, T item) + { + foreach (T x in enumerable) + yield return x; + + yield return item; + } + + internal static void ForEach<T>(this IEnumerable<T> enumeration, Action<T> action) + { + foreach (T item in enumeration) + { + action(item); + } + } + + internal static int IndexOf<T>(this IEnumerable<T> enumerable, T item) + { + if (enumerable == null) + throw new ArgumentNullException("enumerable"); + + var i = 0; + foreach (T element in enumerable) + { + if (Equals(element, item)) + return i; + + i++; + } + + return -1; + } + + internal static int IndexOf<T>(this IEnumerable<T> enumerable, Func<T, bool> predicate) + { + var i = 0; + foreach (T element in enumerable) + { + if (predicate(element)) + return i; + + i++; + } + + return -1; + } + + internal static IEnumerable<T> Prepend<T>(this IEnumerable<T> enumerable, T item) + { + yield return item; + + foreach (T x in enumerable) + yield return x; + } + } +}
\ No newline at end of file |