/// <summary>Adds a range of items to an <see cref="ICollection{T}"/>.</summary>
/// <typeparam name="T">The type held in the <see cref="ICollection{T}"/>.</typeparam>
/// <param name="collection">The <see cref="ICollection{T}"/> instance to add the items to.</param>
/// <param name="items">The items to add the <see cref="ICollection{T}"/>.</param>
/// <param name="filter">[Optional] A filter to use to select specific values from the <paramref name="items"/>.</param>
/// <param name="transform">[Optional] A transform to apply to each of the <paramref name="items"/>.</param>
/// <exception cref="ArgumentNullException">Thrown if the <paramref name="collection"/> given is null.</exception>
/// <exception cref="ArgumentNullException">Thrown if the <paramref name="items"/> given is null.</exception>
public static void AddRange<T>(this ICollection<T> collection, IEnumerable<T> items, Func<T, bool> filter = null, Func<T, T> transform = null)
{
Throw.IfNull("collection", collection);
Throw.IfNull("items", items);
if (filter == null)
filter = t => true;
if (transform == null)
transform = t => t;
foreach (T item in items.Where(filter))
collection.Add(transform(item));
}