[c#] IList가 AddRange를 지원하지 않는 이유

List.AddRange()존재하지만 존재 IList.AddRange()하지 않습니다.
이것은 나를 이상하게 생각합니다. 그 이유는 무엇입니까?



답변

인터페이스는 구현하기 쉽고 “부엌을 제외한 모든 것”을 포함하지 않기 때문입니다. 추가 AddRange하면 InsertRangeRemoveRange(대칭) 을 추가해야합니다 . 더 나은 질문은 IList<T>인터페이스와 유사한 인터페이스에 대한 확장 메서드가없는 이유 IEnumerable<T>입니다. (에서 장소에 대한 확장 방법 Sort, BinarySearch… 유용 할 것이다)


답변

IList에서 “AddRange”, “Sort”, …에 대한 확장 메서드를 갖고 싶은 사람들을 위해,

다음은 AddRange확장 방법입니다.

 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);
     }
}

이 작업을 수행하는 작은 라이브러리를 만들었습니다. 각 프로젝트에서 확장 방법을 다시 실행하는 것보다 더 실용적이라고 생각합니다.

일부 방법은 List보다 느리지 만 작업을 수행합니다.

관심을 가질만한 GitHub는 다음과 같습니다.

IListExtension 저장소


답변