Não é possível acrescentar uma lista para outra em C # ... tentando usar AddRange
-
19-09-2019 - |
Pergunta
Oi Eu estou tentando acrescentar uma lista para outra. Já fiz isso usando AddRange()
antes, mas não parece estar funcionando aqui ... Aqui está o código:
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);
Eu fiz depuração para verificar os resultados, aqui está o que eu tenho: resultCollection
tem uma contagem de 4 resultCollection2
tem uma contagem de 6, e depois de adicionar o intervalo, resultCollection
ainda só tem uma contagem de 4, quando deve ter uma contagem de 10.
Alguém pode ver o que estou fazendo de errado? Qualquer ajuda é apreciada.
Obrigado,
Matt
Solução
Quando você chama ToList()
você não está enrolando a coleção em um List<T>
você está criando um novo List<T>
com os mesmos itens. Então, o que você está fazendo efetivamente aqui é a criação de uma nova lista, adicionando os itens a ele, e, em seguida, atirar a lista de distância.
Você precisaria fazer algo como:
List<E> merged = new List<E>();
merged.AddRange(resultCollection);
merged.AddRange(resultCollection2);
Como alternativa, se você estiver usando C # 3.0, basta usar Concat
, por exemplo.
resultCollection.Concat(resultCollection2); // and optionally .ToList()
Outras dicas
Eu diria .ToList () está criando uma nova coleção. Portanto seus itens estão sendo adicionados a uma nova coleção que é imediatamente jogado fora e os restos originais intactas.
resultCollection.ToList()
irá retornar uma nova lista.
Tente:
List<E> list = resultCollection.ToList();
list.AddRange(resultCollection2);
Tente
IList newList = resultCollection.ToList () AddRange (resultCollection2).;
List<E> newList = resultCollection.ToList();
newList.AddRange(resultCollection2);
Você pode usar qualquer um dos seguintes:
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));