• Domingo 22 de Diciembre de 2024, 04:23

Autor Tema:  Clonar una coleccion  (Leído 1333 veces)

Radamantis86

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Clonar una coleccion
« en: Sábado 9 de Enero de 2010, 00:17 »
0
Que tal tengo poco codificando en  C# y quisiera saber como poder clonar una colección  ya que mi problema radica en que al enviarla a un formulario diferente lo que modifique en dicho formulario afecta directamente a mi colección ya que esto se hace por referencia. aki unos fragmentos de codigo antes de enviar la coleccion al formulario:

 if (ctlgrdPartidasentrada.CurrentCell.OwningColumn.Name == "pMedidasPartida")
            {
                if (ctlgrdPartidasentrada.CurrentRow != null)
                {
                    if (this.CrudAction == eCRUDAction.Read ||      this.PrincipalObject[ctlgrdTarjasEntrada.CurrentRow.Index].pListaPartidas[e.RowIndex].pMedidasPartida.Count <= 0)
                    {
                        if (this.PrincipalObject[ctlgrdTarjasEntrada.CurrentRow.Index].pListaPartidas[e.RowIndex].pMedidasPartida_Trash.Count <= 0)
                             //Cargo las Medidas de la partida
                            CargarMedidasPartidasTarja(PrincipalObject[ctlgrdTarjasEntrada.CurrentRow.Index].pListaPartidas[e.RowIndex]);
                    }
                    frmMedidasPartidaTarja ofrm = new
                   //Aqui envio mi coleccion de pMedidasPartida
frmMedidasPartidaTarja(PrincipalObject[ctlgrdTarjasEntrada.CurrentRow.Index].pListaPartidas[e.RowIndex].pMedidasPartida, this.CrudAction);
                    ofrm.ShowInTaskbar = false;
                    ofrm.StartPosition = FormStartPosition.CenterScreen;
                   

                    if (ofrm.ShowDialog(this) == DialogResult.OK)
                    {
                       //En esta parte deberia asignar la coleccion modificada en el formulario al objeto principal
                        PrincipalObject[ctlgrdTarjasEntrada.CurrentRow.Index].pListaPartidas[e.RowIndex].pMedidasPartida = ofrm.MedidasPartida;
                        if (ofrm.MedidasPartida_Trash.Count > 0)
                            PrincipalObject[ctlgrdTarjasEntrada.CurrentRow.Index].pListaPartidas[e.RowIndex].pMedidasPartida_Trash = ofrm.MedidasPartida_Trash;

                    }
                }
            }



Parte del Codigo del Formulario:

       #region Campos
       
        GColeccion<MedidasPartidaTarja> _MedidasPartida;
        GColeccion<MedidasPartidaTarja> _MedidasPartida_Trash;
        eCRUDAction CrudAction = eCRUDAction.Read;
        #endregion

        #region Propiedades
        public GColeccion<MedidasPartidaTarja> MedidasPartida
        {
            get { if (_MedidasPartida == null) _MedidasPartida = new GColeccion<MedidasPartidaTarja>(); return _MedidasPartida; }
            set { _MedidasPartida = value;  }
        }
        public GColeccion<MedidasPartidaTarja> MedidasPartida_Trash
        {
            get { if (_MedidasPartida_Trash == null) _MedidasPartida_Trash = new GColeccion<MedidasPartidaTarja>(); return _MedidasPartida_Trash; }
            set { _MedidasPartida_Trash = value; }
        }
        #endregion

 public frmMedidasPartidaTarja(GColeccion<MedidasPartidaTarja> value, eCRUDAction _crudValue)
        {
            InitializeComponent();
            InitializeClass();
            this.CrudAction = _crudValue;
           //Aqui asigno la coleccion que recibo, "MedidasPartidas" esta declarada localmente aun asi todo lo que le modifique afecta directamente a mi coleccion       principal
            MedidasPartida = value;
         
            SetEnabledControl();
            SetGridColums();
            SetDataSource();
        }
-------------------------------------------------------------------------------------------------
Nacesito saber como afectar a MedidasPartida sin que se refleje en el objeto principal, de antemano gracias por sus apoyo

tannke

  • Miembro MUY activo
  • ***
  • Mensajes: 152
  • Nacionalidad: es
    • Ver Perfil
Re: Clonar una coleccion
« Respuesta #1 en: Sábado 9 de Enero de 2010, 12:19 »
0
has probado con:
List.CopyTo (T[]);  el problema de esto es que te lo pasa a una matriz.

Alomejor si el anterior no te sirve tendrias que crear una nueva lista manualmente y desde un buclre foreach copiar de uno a otro.
tambien podrias usar el for si el foreach te da problemas, algo como:

Código: C#
  1.  
  2.             List<string> aa = new List<string>();
  3.             List<string> bb = new List<string>();
  4.             aa.Add("1");
  5.             aa.Add("2");
  6.             aa.Add("3");
  7.             aa.Add("4");
  8.  
  9.             for (int i = 0; i < aa.Count; i++)
  10.             {
  11.                 bb.Add(aa[i]);
  12.             }
  13.  

saludos

Radamantis86

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Clonar una coleccion
« Respuesta #2 en: Lunes 11 de Enero de 2010, 19:13 »
0
Muchas gracias por tu respuesta, me sirvió de mucho :D