Подтвердить что ты не робот

Почему в IList <T> нет методов Insert, которые принимают IEnumerable <T>?

Я в ситуации, когда просто хочу добавить значения в строковый массив (тип String []) к объекту с IList <String> . Быстрый поиск MSDN показал, что IList <T> Метод Insert имеет только версию, которая принимает индекс и объект T, и не имеет версии, которая принимает IEnumerable <T> вместо T. Означает ли это, что я должен написать цикл над списком ввода, чтобы поместить значения в список назначения? Если это случай, для меня это выглядит очень ограниченным и довольно недружелюбным дизайном API. Может быть, я что-то упустил. Что делают специалисты С# в этом случае?

4b9b3361

Ответ 1

Поскольку интерфейс, как правило, является наименее функциональным, необходимым для его использования, чтобы уменьшить нагрузку на разработчиков. С С# 3.0 вы можете добавить это как метод расширения:

public static void AddRange<T>(this IList<T> list, IEnumerable<T> items) {
    if(list == null) throw new ArgumentNullException("list");
    if(items == null) throw new ArgumentNullException("items");
    foreach(T item in items) list.Add(item);
}

et voila; IList<T> теперь имеет AddRange:

IList<string> list = ...
string[] arr = {"abc","def","ghi","jkl","mno"};
list.AddRange(arr);