Um colega de trabalho me perguntou hoje como adicionar um intervalo a uma coleção. Ele tem uma classe que herda Collection<T>
. Há uma propriedade get-only desse tipo que já contém alguns itens. Ele deseja adicionar os itens de outra coleção à coleção de propriedades. Como ele pode fazer isso de uma forma amigável com C # 3? (Observe a restrição sobre a propriedade get-only, que impede soluções como fazer Union e reatribuir.)
Claro, um foreach com Property. Adicionar funcionará. Mas um List<T>
AddRange no estilo seria muito mais elegante.
É fácil escrever um método de extensão:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Mas tenho a sensação de que estou reinventando a roda. Não encontrei nada semelhante em System.Linq
ou morelinq .
Design ruim? Basta ligar para adicionar? Perdendo o óbvio?
ICollection<T>
não parece haver um Add
método. msdn.microsoft.com/en-us/library/… No entanto, Collection<T>
tem um.
Add(T item)
em primeiro lugar? Parece uma abordagem incompleta para oferecer a capacidade de adicionar um único item e então esperar que todos os chamadores iterem para adicionar mais de um de cada vez. Sua afirmação é certamente verdadeira para, IEnumerable<T>
mas me senti frustrado ICollections
em mais de uma ocasião. Eu não discordo de você, apenas desabafando.