Un compañero de trabajo me preguntó hoy cómo agregar un rango a una colección. Él tiene una clase que hereda de Collection<T>
. Hay una propiedad de solo obtener de ese tipo que ya contiene algunos elementos. Él quiere agregar los artículos en otra colección a la colección de propiedades. ¿Cómo puede hacerlo en una forma amigable para C# 3? (Tenga en cuenta la restricción sobre la propiedad de solo obtener acceso, que impide soluciones como hacer un sindicato y reasignar).AddRange en una colección
Seguro, un foreach con la propiedad. Agregar funcionará Pero un AddRange de estilo List<T>
sería mucho más elegante.
Es bastante fácil de 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 reinventar la rueda. No encontré nada similar en System.Linq
o morelinq.
¿Mal diseño? ¿Solo llamar Agregar? ¿Perdiendo lo obvio?
Recuerde que la Q de LINQ es 'consulta' y se trata realmente de recuperación de datos, proyección, transformación, etc.La modificación de las colecciones existentes realmente no entra en el ámbito del propósito previsto de LINQ, razón por la cual LINQ no proporciona nada listo para usar para esto. Pero los métodos de extensión (y en particular su muestra) serían ideales para esto. – Levi
Un problema, 'ICollection' no parece tener un método 'Add'. http://msdn.microsoft.com/en-us/library/system.collections.icollection_methods(v=vs.100).aspx Sin embargo 'Collection ' tiene uno. –
@TimGoodman: esa es la interfaz no genérica. Ver http://msdn.microsoft.com/en-us/library/92t2ye13.aspx – TrueWill