Why doesn't IList support AddRange

后端 未结 2 1015
余生分开走
余生分开走 2020-12-09 00:54

List.AddRange() exists, but IList.AddRange() doesn\'t.
This strikes me as odd. What\'s the reason behind this?

相关标签:
2条回答
  • 2020-12-09 00:55

    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)

    0 讨论(0)
  • 2020-12-09 01:01

    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

    0 讨论(0)
提交回复
热议问题