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