CollectionExtensions.cs 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. namespace Ips.Library.Basic
  5. {
  6. public static class CollectionExtensions
  7. {
  8. public static void AddIf<T>(this ICollection<T> source, bool predicate, T item)
  9. {
  10. if (predicate) source.Add(item);
  11. }
  12. public static bool AddIfNotContains<T>(this ICollection<T> source, T item)
  13. {
  14. if (source.Contains(item))
  15. {
  16. return false;
  17. }
  18. source.Add(item);
  19. return true;
  20. }
  21. public static IEnumerable<T> AddIfNotContains<T>(this ICollection<T> source, IEnumerable<T> items)
  22. {
  23. var addedItems = new List<T>();
  24. foreach (var item in items)
  25. {
  26. if (source.Contains(item))
  27. {
  28. continue;
  29. }
  30. source.Add(item);
  31. addedItems.Add(item);
  32. }
  33. return addedItems;
  34. }
  35. public static bool AddIfNotContains<T>(this ICollection<T> source, Func<T, bool> predicate, Func<T> itemFactory)
  36. {
  37. if (source.Any(predicate))
  38. {
  39. return false;
  40. }
  41. source.Add(itemFactory());
  42. return true;
  43. }
  44. public static IList<T> RemoveAll<T>(this ICollection<T> source, Func<T, bool> predicate)
  45. {
  46. var items = source.Where(predicate).ToList();
  47. foreach (var item in items)
  48. {
  49. source.Remove(item);
  50. }
  51. return items;
  52. }
  53. public static void RemoveAll<T>(this ICollection<T> source, IEnumerable<T> items)
  54. {
  55. foreach (var item in items)
  56. {
  57. source.Remove(item);
  58. }
  59. }
  60. }
  61. }