Un collègue m'a demandé aujourd'hui comment ajouter une gamme à une collection. Il a une classe qui hérite de Collection<T>
. Il existe une propriété get-only de ce type qui contient déjà certains éléments. Il souhaite ajouter les éléments d'une autre collection à la collection de propriétés. Comment peut-il le faire de manière conviviale C # 3? (Notez la contrainte concernant la propriété get-only, qui empêche des solutions telles que faire Union et réaffecter.)
Bien sûr, un foreach avec la propriété. L'ajout fonctionnera. Mais un List<T>
style AddRange serait beaucoup plus élégant.
Il est assez facile d'écrire une méthode d'extension:
public static class CollectionHelpers
{
public static void AddRange<T>(this ICollection<T> destination,
IEnumerable<T> source)
{
foreach (T item in source)
{
destination.Add(item);
}
}
}
Mais j'ai le sentiment de réinventer la roue. Je n'ai rien trouvé de similaire dans System.Linq
ou morelinq .
Mauvaise conception? Appelez simplement Ajouter? Vous manquez l'évidence?
ICollection<T>
ne semble pas avoir de Add
méthode. msdn.microsoft.com/en-us/library/... Cependant en Collection<T>
a un.
Add(T item)
en premier lieu? Cela ressemble à une approche à moitié cuite pour offrir la possibilité d'ajouter un seul élément, puis de s'attendre à ce que tous les appelants itèrent pour en ajouter plusieurs à la fois. Votre déclaration est certainement vraie, IEnumerable<T>
mais je me suis retrouvé frustré à ICollections
plus d'une occasion. Je ne suis pas en désaccord avec vous.