Un compañero de trabajo me preguntó hoy cómo agregar un rango a una colección. Tiene una clase de la que hereda Collection<T>
. Hay una propiedad de solo obtención de ese tipo que ya contiene algunos elementos. Quiere agregar los elementos de otra colección a la colección de propiedades. ¿Cómo puede hacerlo de una manera compatible con C # 3? (Tenga en cuenta la restricción sobre la propiedad de solo obtener, que evita soluciones como hacer Unión y reasignar).
Seguro, un foreach con Property. Agregar funcionará. Pero un List<T>
AddRange al estilo sería mucho más elegante.
Es bastante fácil escribir un método de extensión:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Pero tengo la sensación de que estoy reinventando la rueda. No encontré nada similar en System.Linq
ni más en linq .
¿Mal diseño? ¿Solo llamar a Agregar? ¿Falta lo obvio?
ICollection<T>
no parece tener un Add
método. msdn.microsoft.com/en-us/library/… Sin embargo, Collection<T>
tiene uno.
Add(T item)
en primer lugar? Parece un enfoque a medias para ofrecer la capacidad de agregar un solo elemento y luego esperar que todas las personas que llaman repitan para agregar más de uno a la vez. Su declaración es ciertamente cierta para, IEnumerable<T>
pero me he sentido frustrado ICollections
en más de una ocasión. No estoy en desacuerdo contigo, solo desahogo.