public static class CollectionExtensions { public static T Find(this IEnumerable list, Predicate predicate) { foreach (var item in list) if (predicate((T)item)) return (T)item; return default(T); } public static bool Contains(this IEnumerable list, T value) { IEqualityComparer comparer = EqualityComparer.Default; foreach (var item in list) if (comparer.Equals((T)item, value)) return true; return false; } public static bool Contains(this IEnumerable list, Predicate predicate) { foreach (var item in list) if (predicate(item)) return true; return false; } public static int FindIndex(this IEnumerable list, Predicate predicate) { int current = -1; foreach (var item in list) { current++; if (predicate((T)item)) return current; } return -1; } public static void ForEach(this IEnumerable list, Action action) { foreach (var item in list) action(item); } public static void AddIf(this IList list, T item, Predicate predicate) { if (predicate(item)) list.Add(item); } public static void AddIfNot(this IList list, T item, Predicate predicate) { if (!predicate(item)) list.Add(item); } public static void RemoveAll(this IList list, Predicate predicate) { for(int i = (list.Count - 1); i >= 0; i--) if (predicate(list[i])) list.RemoveAt(i); } public static void Sort(this ObservableCollection list, Comparison comparison) { for (int i = list.Count - 1; i >= 0; i--) { for (int j = 1; j <= i; j++) { T o1 = list[j - 1]; T o2 = list[j]; if (comparison(o1, o2) > 0) list.Move(j - 1, j); } } } }