CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: Radamantis86 en Sábado 9 de Enero de 2010, 00:17
Título: Clonar una coleccion
Publicado por: Radamantis86 en Sábado 9 de Enero de 2010, 00:17
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;
#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
Título: Re: Clonar una coleccion
Publicado por: tannke en Sábado 9 de Enero de 2010, 12:19
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: