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