Question

Salut, je suis en train d'ajouter une liste à une autre. Je l'ai fait à l'aide AddRange() avant, mais il ne semble pas fonctionner ici ... Voici le code:

IList<E> resultCollection = ((IRepository<E, C>)this).SelectAll(columnName, maxId - startId + 1, startId);                
IList<E> resultCollection2 = ((IRepository<E, C>)this).SelectAll(columnName, endId - minId + 1, minId);
resultCollection.ToList().AddRange(resultCollection2);

Je l'ai mise au point pour vérifier les résultats, voici ce que je suis: resultCollection a un compte de 4 resultCollection2 a un nombre de 6, et après avoir ajouté la gamme, resultCollection encore a seulement un nombre de 4, quand il devrait avoir un compte 10.

Quelqu'un peut-il voir ce que je fais mal? Toute aide est appréciée.

Merci,
Matt

Était-ce utile?

La solution

Lorsque vous appelez ToList() vous n'êtes pas envelopper la collection dans un List<T> vous créez une nouvelle List<T> avec les mêmes éléments qu'il contient. Donc ce que vous faites effectivement crée ici une nouvelle liste, en ajoutant les éléments à, puis jeter la liste loin.

Vous auriez besoin de faire quelque chose comme:

List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);

Par ailleurs, si vous utilisez C # 3.0, utilisez simplement Concat, par exemple.

resultCollection.Concat(resultCollection2); // and optionally .ToList()

Autres conseils

Je suppose .ToList () crée une nouvelle collection. Par conséquent, vos articles sont ajoutés à une nouvelle collection qui est immédiatement jeté et l'original reste intact.

resultCollection.ToList() retourne une nouvelle liste.

Essayez:

List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);

Essayez

    IList newList = resultCollection.ToList () AddRange (resultCollection2).

List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);

Vous pouvez utiliser l'une des options suivantes:

List<E> list = resultCollection as List<E>;
if (list == null)
    list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

Ou:

// Edit: this one could be done with LINQ, but there's no reason to limit
//       yourself to .NET 3.5 when this is just as short.
List<E> list = new List<E>(resultCollection);
list.AddRange(resultCollection2);

Ou:

List<E> list = new List<E>(resultCollection.Concat(resultCollection2));
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top