List.AddRange()
존재하지만 존재 IList.AddRange()
하지 않습니다.
이것은 나를 이상하게 생각합니다. 그 이유는 무엇입니까?
답변
인터페이스는 구현하기 쉽고 “부엌을 제외한 모든 것”을 포함하지 않기 때문입니다. 추가 AddRange
하면 InsertRange
및 RemoveRange
(대칭) 을 추가해야합니다 . 더 나은 질문은 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는 다음과 같습니다.