J'ai récemment été mordu par le (bien trop commun à mon avis) gotcha de Concat
retourne son résultat, plutôt que d'ajouter à la liste elle-même.IEnumerable <T> .Concat - Un remplacement qui peut fonctionner sans changer la référence?
Par exemple.
List<Control> mylist=new List<Control>;
//.... after adding Controls into mylist
MyPanel.Controls.Concat(mylist); //This will not affect MyPanel.Controls at all.
MyPanel.Controls=MyPanel.Controls.Concat(mylist); //This is what is needed, but the Controls reference can not be reassigned (for good reason)
Y a-t-il un autre moyen de combiner deux listes qui fonctionneront lorsque la référence de la collection est en lecture seule?
Est-ce la seule façon de le faire avec un foreach?
foreach(var item in mylist){
MyPanel.Controls.Add(item);
}
Y a-t-il un meilleur moyen sans foreach?
Hmm .. Je regardais les arguments et n'a même pas la fonction 'connecter ToArray' à l'utilisation que ... – Earlz
OTOH WRT à votre question sur « la combinaison de deux listes », Liste .AddRange accepte IEnumerable afin que vous puissiez passez directement une autre liste. –
L'ajout de l'appel ToArray ne fait pas grand-chose, sauf que mylist est énuméré deux fois au lieu d'une fois. –