using System; using System.Collections.Generic; using System.Linq; using System.Text; public static class CollectionExtensions { public static void AddRange(this Collection collection, IEnumerable values) { foreach (var item in values) { collection.Add(item); } } public static T Find(this Collection collection, Predicate predicate) { foreach (var item in collection) { if (predicate(item)) return item; } return default(T); } public static Collection FindAll(this Collection collection, Predicate predicate) { Collection all = new Collection(); foreach (var item in collection) { if (predicate(item)) all.Add(item); } return all; } public static int FindIndex(this Collection collection, Predicate predicate) { return FindIndex(collection, 0, predicate); } public static int FindIndex(this Collection collection, int startIndex, Predicate predicate) { return FindIndex(collection, startIndex, collection.Count, predicate); } public static int FindIndex(this Collection collection, int startIndex, int count, Predicate predicate) { for (int i = startIndex; i < count; i++) { if (predicate(collection[i])) return i; } return -1; } public static T FindLast(this Collection collection, Predicate predicate) { for (int i = collection.Count - 1; i >= 0; i--) { if (predicate(collection[i])) return collection[i]; } return default(T); } public static int FindLastIndex(this Collection collection, Predicate predicate) { return FindLastIndex(collection, collection.Count - 1, predicate); } public static int FindLastIndex(this Collection collection, int startIndex, Predicate predicate) { return FindLastIndex(collection, startIndex, startIndex + 1, predicate); } public static int FindLastIndex(this Collection collection, int startIndex, int count, Predicate predicate) { for (int i = startIndex; i >= startIndex - count; i--) { if (predicate(collection[i])) return i; } return -1; } public static void ForEach(this Collection collection, Action action) { foreach (var item in collection) { action(item); } } public static int RemoveAll(this Collection collection, Predicate match) { int count = 0; for (int i = 0; i < collection.Count; i++) { if (match(collection[i])) { collection.Remove(collection[i]); count++; i--; } } return count; } public static bool TrueForAll(this Collection collection, Predicate match) { foreach (var item in collection) { if (!match(item)) return false; } return true; } }