none
Clonar o copiar listas y agregar el contenido en otra lista. RRS feed

  • Pregunta

  • Hola tengo el siguiente problema, tengo un objecto _LineProgram el cual coontiene 3 niveles de liestas. 

    1 - WeekDayList - Lista de días de la semana. 

    Dentro de esta lista tenemos a 

    2 - Shifts Contione una lista de turnos para ese día. 

    Y dentro de esta lista tenemos a

    3 - StopProgramList Codigos de parada para los turnos.

    Estas 3 listas corresponden al día Lunes (Monday).

    Lo que quiero hacer, es que todo el contenido del día lunes (Lista Shift y lista StopProgramList), se copie tanto para el día jueves y viernes por ej o los días que yo le indique. 

    Mi Watch para entender la estrucura. 


    José Maria Antunez

    jueves, 11 de abril de 2019 11:42

Respuestas

  • Para agregar un nuevo Items a _LineProgram, los pasos lógicos son:

    Supongamos que la instancia de _LineProgram está en la variable "lp"

    1) Creas el nuevo objeto WeekDay: WeekDay jueves = new WeekDay(); 

    2) Seteas las prop del nuevo objeto "jueves": jueves.Day="Thursday"; jueves.Nombre="Jueves"; ...etc. Aquí es donde tenes que agregarle la nueva lista Shifts (previamente hay que crearla y cargar sus items)

    3) Agregas el nuevo objeto jueves a la lista WeekDayList: lp.WeekDayList.Add(jueves);


    viernes, 12 de abril de 2019 11:40
  • Si mi duda es com hago para aregar otro item mas con dia Jueves en WeekDayList  y luego dentro de ese día (item) todo lo que tiene el lunes, shift(Turnos) y stopProgramList. 

    José Maria Antunez

    jueves, 11 de abril de 2019 13:04

Todas las respuestas

  • Hola tengo el siguiente problema, tengo un objecto _LineProgram el cual coontiene 3 niveles de liestas. 

    1 - WeekDayList - Lista de días de la semana. 

    Dentro de esta lista tenemos a 

    2 - Shifts - Contione una lista de turnos para ese día. 

    Y dentro de esta lista tenemos a

    3 - StopProgramList - Codigos de parada para los turnos.

    Estas 3 listas corresponden al día Lunes (Monday).

    Lo que quiero hacer, es que todo el contenido del día lunes (Lista Shift y lista StopProgramList), se copie tanto para el día jueves y viernes por ej o los días que yo le indique. 

    Mi Watch para entender la estrucura. 

     

    Este es mi Watch para que se vea como mas claridad la estructora. 


    José Maria Antunez

    miércoles, 10 de abril de 2019 19:56
  • "Estas 3 listas corresponden al día Lunes (Monday). "

    Esto es contradictorio con lo que veo: Entiendo que Monday es uno de los objetos del tipo WeekDay, contenido en la lista WeekDayList. Si es así, el objeto Monday contiene la lista Shifts, la cual contiene la lista StopProgramList. Asumiendo esto, te dejo este ejemplo:

    private Copiar(_LineProgram lp)
        {
          WeekDay Lunes = lp.WeekDayList.Find(x => x.Dia == "Monday");
          WeekDay Jueves = lp.WeekDayList.Find(x => x.Dia == "Thursday");
          // aquí seteas las propiedades del WeekDay "Jueves"
          foreach (Shift s in Lunes.Shifts)
          {
            Shift shJueves = new Shift();
            // aquí seteas las prop del Shift "shJueves"
            foreach (StopProgram sp in s.StopProgramList)
            {
              StopProgram spJueves = new StopProgram();
              spJueves.Stop = sp.Stop;
              //seteas el resto de las prop del StopProgram "spJueves"
              shJueves.StopProgramList.Add(spJueves);
            }
            Jueves.Shifts.Add(shJueves);
          }
        }


    miércoles, 10 de abril de 2019 20:52
  • Hola Carlos, Monday es un item de la lista WeekDayList, que se iria llenando a medida que yo selecciono los días en la interfaz. En el Ej: tendria cargado el día Lunes, con la lista Shift y esta conteniendo a la lista StopProgramList.

    Lo que no entiendo cuando me dices: //Aqui seteas propiedades, en realidad no deberia setearlas, deberian las listas tener el mismo contenido que tuvieron para el día Lunes, y copiarlas para el dia que yo desee, por ej Jueves.

    Saludos!. 

     


    José Maria Antunez

    jueves, 11 de abril de 2019 11:18
  • La idea es crear un objeto nuevo para el jueves, incluyendo las listas y sus items, luego setear las prop con los valores que tengan los objetos del lunes. Porque si asignamos objetos directamente (obj1=obj2), lo que ocurre es que se asignan las referencias y tendrías los mismos objetos para lunes y jueves. A menos que quiera que ocurra eso, pero en ese caso, tener en cuenta que las modificaciones en uno impactarán también en el otro.  

    • Editado AntiWork jueves, 11 de abril de 2019 11:44
    jueves, 11 de abril de 2019 11:39
  • Puedes copiar una lista, o parte de la misma, en otra con un codigo similar a este:

    listaDestino.AddRange(listaOrigen.Select(condicion));

    La condicion es una expresion lambda tal como x=>x.Dia==1 que logicamente depende de los campos que contengan los objetos de tu lista.

    O, si quieres copiar la lista entera:

    listaDestino.AddRange(listaOrigen);

    Recuerda que esto hace un "shallow copy" y no un "deep copy", es decir, los objetos de la lista se copian por referencia, no se clona cada uno de los objetos por separado.

    jueves, 11 de abril de 2019 12:15
    Moderador
  • Si mi duda es com hago para aregar otro item mas con dia Jueves en WeekDayList  y luego dentro de ese día (item) todo lo que tiene el lunes, shift(Turnos) y stopProgramList. 

    José Maria Antunez

    jueves, 11 de abril de 2019 13:04
  • Para agregar un nuevo Items a _LineProgram, los pasos lógicos son:

    Supongamos que la instancia de _LineProgram está en la variable "lp"

    1) Creas el nuevo objeto WeekDay: WeekDay jueves = new WeekDay(); 

    2) Seteas las prop del nuevo objeto "jueves": jueves.Day="Thursday"; jueves.Nombre="Jueves"; ...etc. Aquí es donde tenes que agregarle la nueva lista Shifts (previamente hay que crearla y cargar sus items)

    3) Agregas el nuevo objeto jueves a la lista WeekDayList: lp.WeekDayList.Add(jueves);


    viernes, 12 de abril de 2019 11:40