using System; using System.Collections.Generic; using System.Linq; namespace Ips.Library.Basic { public static class CollectionExtensions { public static void AddIf(this ICollection source, bool predicate, T item) { if (predicate) source.Add(item); } public static bool AddIfNotContains(this ICollection source, T item) { if (source.Contains(item)) { return false; } source.Add(item); return true; } public static IEnumerable AddIfNotContains(this ICollection source, IEnumerable items) { var addedItems = new List(); foreach (var item in items) { if (source.Contains(item)) { continue; } source.Add(item); addedItems.Add(item); } return addedItems; } public static bool AddIfNotContains(this ICollection source, Func predicate, Func itemFactory) { if (source.Any(predicate)) { return false; } source.Add(itemFactory()); return true; } public static IList RemoveAll(this ICollection source, Func predicate) { var items = source.Where(predicate).ToList(); foreach (var item in items) { source.Remove(item); } return items; } public static void RemoveAll(this ICollection source, IEnumerable items) { foreach (var item in items) { source.Remove(item); } } } }