Anexar um conteúdo de listas a outra lista C #


157

Eu tenho o seguinte:

  1. Uma lista principal chamada GlobalStrings
  2. Outra lista chamada localStrings

Em um loop, por exemplo:

List<string> GlobalStrings = new List<string>(); 
List<string> localStrings = new List<string>();
for(x=1;x<10;x++)
{
    localStrings.Add("some value"); 
    localStrings.Add("some value");
}
// Want to append localStrings to GlobalStrings as easily as possible

3
empilhar sobre fluxo sempre balança ... boa pergunta ...
Sangram Nandkhile

2
Você está fazendo algo errado, localStrings = new List<string>;deve ser colocado antes do forloop #
Wassim AZIRAR

1
Wassim, acho que é por isso que ele diferencia entre local e global; localStrings é local no escopo do loop for, GlobalStrings está no escopo global.
Dagrooms

Este é um péssimo exemplo (que convida a comentários totalmente equivocados, como os de Wassim), já que obviamente você poderia apenas fazê-lo Addem GlobalStringsvez de fazê-lo localStrings. E o FWIW que você executa o loop é executado apenas 9 vezes. Melhor seriafor (int x = 0; x < 10; ++x) {var localStrings = GetAListOfStrings(); /* append those to GlobalStrings */}
Jim Balter

Respostas:



55
GlobalStrings.AddRange(localStrings);

Isso funciona.

Documentação: List<T>.AddRange(IEnumerable<T>).


2
Um personagem perdeu um voto positivo. Esteja avisado, muitas vezes você perde muito mais! (Como sono ou sanidade.)
deed02392 23/09

Embora correta, essa resposta agora é uma duplicata da resposta de Lee.
Cœur

22

Experimente o método AddRange:

GlobalStrings.AddRange(localStrings);

Embora correta, essa resposta agora é uma duplicata da resposta de Lee.
Cœur

9

Com o Linq

var newList = GlobalStrings.Append(localStrings)

3
Anexar parece não existir? Você tem um link para o documento MSDN?
Pod

2
Talvez você quis dizer Concat ... embora isso signifique muitas cópias e seja uma boa ilustração de como não usar o LINQ.
Jim Balter

5

Aqui está o meu exemplo:

    private List<int> m_machinePorts = new List<int>();

    public List<int> machinePorts
    {
        get { return m_machinePorts; }
    }

    Init()
    {
        // Custom function to get available ethernet ports
        List<int> localEnetPorts = _Globals.GetAvailableEthernetPorts();

        // Custome function to get available serial ports
        List<int> localPorts = _Globals.GetAvailableSerialPorts();

        // Build Available port list 
        m_machinePorts.AddRange(localEnetPorts);
        m_machinePorts.AddRange(localPorts);
     }

2

se você quiser ficar "conciso" :)

List<string>GlobalStrings = new List<string>(); 

for(int x=1; x<10; x++) GlobalStrings.AddRange(new List<string> { "some value", "another value"});
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.