Why doesn't IList support AddRange
Solution 1:
Because an interface shoud be easy to implement and not contain "everything but the kitchen". If you add AddRange
you should then add InsertRange
and RemoveRange
(for symmetry). A better question would be why there aren't extension methods for the IList<T>
interface similar to the IEnumerable<T>
interface. (extension methods for in-place Sort
, BinarySearch
, ... would be useful)
Solution 2:
For those who want to have extension methods for "AddRange", "Sort", ... on IList,
Below is the AddRange
extension method:
public static void AddRange<T>(this IList<T> source, IEnumerable<T> newList)
{
if (source == null)
{
throw new ArgumentNullException(nameof(source));
}
if (newList == null)
{
throw new ArgumentNullException(nameof(newList));
}
if (source is List<T> concreteList)
{
concreteList.AddRange(newList);
return;
}
foreach (var element in newList)
{
source.Add(element);
}
}
I created a small library that does this. I find it more practical than having to redo its extension methods on each project.
Some methods are slower than List but they do the job.
Here is the GitHub to interest them:
IListExtension repository