Сьогодні колега запитав мене, як додати асортимент до колекції. У нього є клас, який успадковує від Collection<T>
. Існує властивість лише цього типу, яка вже містить деякі елементи. Він хоче додати предмети в іншій колекції до колекції майна. Як він може це зробити на C-3? (Зверніть увагу на обмеження щодо властивості get-only, яке перешкоджає таким рішенням, як створення Union і перепризначення.)
Звичайно, передбачення з майном. Додати буде працювати. Але List<T>
-style 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
раз стикався. Я з вами не згоден, просто вентилюю.