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.Linqou morelinq .
Design ruim? Basta ligar para adicionar? Perdendo o óbvio?
ICollection<T>não parece haver um Addmé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 ICollectionsem mais de uma ocasião. Eu não discordo de você, apenas desabafando.