All pastes #2068114 Raw Edit

Someone

public text v1 · immutable
#2068114 ·published 2011-05-24 08:03 UTC
rendered paste body
public 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);
            }
        }
    }
}