Agregar un contenido de listas a otra lista C #

158

Tengo lo siguiente:

  1. Una lista principal llamada GlobalStrings
  2. Otra lista llamada localStrings

En un bucle, por ejemplo:

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
JL
fuente
3
apilar sobre el flujo siempre oscila ... buena pregunta ...
Sangram Nandkhile
2
Lo estás haciendo mal, localStrings = new List<string>;debe colocarse antes del forbucle
Wassim AZIRAR
1
Wassim, creo que es por eso que diferencia entre local y global; localStrings es local para el alcance del bucle for, GlobalStrings está en el alcance global.
Dagrooms
Este es un mal ejemplo (que invita a comentarios totalmente equivocados como el de Wassim), ya que obviamente podría Addhacerlo en GlobalStringslugar de hacerlo localStrings. Y FWIW tu ciclo solo se ejecuta 9 veces. Mejor seríafor (int x = 0; x < 10; ++x) {var localStrings = GetAListOfStrings(); /* append those to GlobalStrings */}
Jim Balter

Respuestas:

55
GlobalStrings.AddRange(localStrings);

Eso funciona.

Documentación: List<T>.AddRange(IEnumerable<T>).

Jimmeh
fuente
2
Un personaje te perdió un voto a favor. ¡Ten cuidado, a menudo te pierde mucho más! (Como dormir o cordura.)
escritura 02392
Si bien es correcta, esta respuesta ahora es un duplicado de la respuesta de Lee.
Cœur
22

Prueba el método AddRange:

GlobalStrings.AddRange(localStrings);
martín
fuente
Si bien es correcta, esta respuesta ahora es un duplicado de la respuesta de Lee.
Cœur
9

Con linq

var newList = GlobalStrings.Append(localStrings)
Blake Pettersson
fuente
3
Anexar no parece existir? ¿Tiene un enlace a MSDN doc para ello?
Pod
2
Quizás te referías a Concat ... aunque eso significaría mucha copia, y es una buena ilustración de cómo no usar LINQ.
Jim Balter
5

Aquí está mi ejemplo:

    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);
     }
Jim Lahman
fuente
2

si quieres obtener "conciso" :)

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

for(int x=1; x<10; x++) GlobalStrings.AddRange(new List<string> { "some value", "another value"});
BillW
fuente