Сегодня сотрудник спросил меня, как добавить диапазон в коллекцию. У него есть класс, наследующий от Collection<T>
. У этого типа есть свойство только для получения, которое уже содержит некоторые элементы. Он хочет добавить элементы из другой коллекции в коллекцию свойств. Как он может сделать это в стиле C # 3? (Обратите внимание на ограничение свойства get-only, которое предотвращает такие решения, как выполнение Union и переназначение.)
Конечно, foreach с Property. Добавить будет работать. Но List<T>
AddRange в стиле -стайл был бы намного элегантнее.
Достаточно просто написать метод расширения:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Но у меня такое чувство, что я изобретаю велосипед заново. Ничего подобного в System.Linq
или morelinq не нашел .
Плохой дизайн? Просто позвоните и добавьте? Упускаете очевидное?
ICollection<T>
вроде нет Add
метода. msdn.microsoft.com/en-us/library/ ... Однако Collection<T>
есть один.
Add(T item)
? Похоже на недоработанный подход, предлагающий возможность добавить один элемент, а затем ожидать, что все вызывающие абоненты будут выполнять итерацию, чтобы добавлять более одного элемента за раз. Ваше утверждение, безусловно, верно, IEnumerable<T>
но я неоднократно разочаровывался в этом ICollections
. Я не возражаю с вами, просто высказываюсь.