using System; using System.Collections.Generic; using System.Linq; namespace ChatController.Extensions { public static class IListTExtensions { public static void AddIfNotIn(this IList pList, T pToAdd) { if (!pList.Contains(pToAdd)) { pList.Add(pToAdd); } } public static void AddRangeIfElementsNotIn(this IList pList, IEnumerable pToAdd) { foreach (var iItem in pToAdd) { pList.AddIfNotIn(iItem); } } public static void AddRange(this IList pList, IEnumerable pToAdd) { foreach (T iItem in pToAdd) { pList.Add(iItem); } } public static bool Exists(this IList pList, Predicate pMatch) { foreach (T iItem in pList) { if (pMatch(iItem)) { return true; } } return false; } public static void MakeEqualTo(this IList plist, IList otherList) { var toRemove = new List(); foreach (T t in plist) { if (!otherList.Contains(t)) { toRemove.Add(t); } } plist.RemoveRange(toRemove); foreach (T t in otherList) { if (!plist.Contains(t)) { plist.Insert(otherList.IndexOf(t), t); } } } public static void RemoveRange(this IList pList, IEnumerable pToRemove) { foreach (T iItem in pToRemove.ToList()) { pList.Remove(iItem); } } public static void RemoveRange(this IList pList, Predicate pMatch) { List lToDelete = pList.Where(t => pMatch(t)).ToList(); pList.RemoveRange(lToDelete); } } }