J'ai une ObservableCollection et j'aimerais définir le contenu d'un IList à celui-ci. Maintenant, je pourrais juste créer une nouvelle instance de la collection ..:
public ObservableCollection<Bar> obs = new ObservableCollection<Bar>();
public void Foo(IList<Bar> list)
{
obs = new ObservableCollection<Bar>(list);
}
Mais comment puis-je réellement prendre le contenu de IList et l'ajouter à mon ObservableCollection existant? Dois-je parcourir tous les éléments ou existe-t-il un meilleur moyen?
public void Foo(IList<Bar> list)
{
foreach (var Elm in list)
obs.Add(Elm);
}
Vous pourriez faire
public void Foo(IList<Bar> list)
{
list.ToList().ForEach(obs.Add);
}
ou comme méthode d'extension,
public static void AddRange<T>(this ObservableCollection<T> collection, IEnumerable<T> items)
{
items.ToList().ForEach(collection.Add);
}
Vous pouvez écrire votre propre méthode d'extension si vous utilisez C # 3 + pour vous aider. Ce code a subi des tests de base pour s’assurer de son bon fonctionnement:
public static void AddRange<T>(this ObservableCollection<T> coll, IEnumerable<T> items)
{
foreach (var item in items)
{
coll.Add(item);
}
}
La mise en boucle est la seule solution car il n'y a pas d'équivalent AddRange
pour ObservableCollection
.
Voici un descendant de ObservableCollection<T>
pour ajouter un message efficace AddRange
, plus des tests unitaires: