Ajouter un contenu de listes à une autre liste C #


158

J'ai ce qui suit:

  1. Une liste principale appelée GlobalStrings
  2. Une autre liste appelée localStrings

Dans une boucle par exemple:

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
stack over flow always rocks ... nice question ...
Sangram Nandkhile

2
Vous le faites mal, localStrings = new List<string>;devrait être placé avant la forboucle
Wassim AZIRAR

1
Wassim, je pense que c'est pourquoi il fait la différence entre local et global; localStrings est local dans la portée de la boucle for, GlobalStrings est dans la portée globale.
Dagrooms

C'est un mauvais exemple (qui invite à des commentaires totalement faux comme ceux de Wassim), car évidemment vous pouvez simplement le Addfaire GlobalStringsau lieu de le localStrings. Et FWIW que vous bouclez ne fonctionne que 9 fois. Mieux vautfor (int x = 0; x < 10; ++x) {var localStrings = GetAListOfStrings(); /* append those to GlobalStrings */}
Jim Balter

Réponses:



55
GlobalStrings.AddRange(localStrings);

Ça marche.

Documentation: List<T>.AddRange(IEnumerable<T>).


2
Un personnage vous a perdu un vote positif. Attention, cela vous fait souvent perdre beaucoup plus! (Comme le sommeil ou la raison.)
deed02392

Bien que correcte, cette réponse est maintenant un double de la réponse de Lee.
Cœur

22

Essayez la méthode AddRange:

GlobalStrings.AddRange(localStrings);

Bien que correcte, cette réponse est maintenant un double de la réponse de Lee.
Cœur

9

Avec Linq

var newList = GlobalStrings.Append(localStrings)

3
L'ajout ne semble pas exister? Avez-vous un lien vers MSDN doc pour cela?
Pod

2
Peut-être que vous vouliez dire Concat ... bien que cela signifierait beaucoup de copie, et est une bonne illustration de la façon de ne pas utiliser LINQ.
Jim Balter

5

Voici mon exemple:

    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

si vous voulez être "concis" :)

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

for(int x=1; x<10; x++) GlobalStrings.AddRange(new List<string> { "some value", "another value"});
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.