elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía actualizada para evitar que un ransomware ataque tu empresa


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Copiar un List en otro (Por valor no por referencia)
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Copiar un List en otro (Por valor no por referencia)  (Leído 11,117 veces)
BlaineMonkey

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Copiar un List en otro (Por valor no por referencia)
« en: 16 Febrero 2010, 12:46 pm »

¿Hay algún método que copie de un List a otro sin que sea por referencia? Es decir que pueda modificar cualquiera de los dos y los cambios no se afecten en ambos List.

He probado a pasarle la lista en el constructor, pero esto lo hace por referencia.

¿La única manera es recorrer la lista original e ir creando los nuevos objetos con los mismos valores que la original?


« Última modificación: 16 Febrero 2010, 12:49 pm por BlaineMonkey » En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Copiar un List en otro (Por valor no por referencia)
« Respuesta #1 en: 16 Febrero 2010, 13:41 pm »

Exacto....sino serializas la lista en memoria y despues lo vuelcas a la nueva lista. Obtienes una nueva lista literalmente igual a la primera, pero no son las mismas (con que cambies una, no cambia la otra)

http://msdn.microsoft.com/es-es/library/bb972188.aspx

es un ejemplo un poco largo, se puede "achicar", aunque no encuentro el articulo originial de donde lo aprendi :-\


En línea

BlaineMonkey

Desconectado Desconectado

Mensajes: 72


Ver Perfil
Re: Copiar un List en otro (Por valor no por referencia)
« Respuesta #2 en: 17 Febrero 2010, 12:33 pm »

Gracias por tu ayuda. Me ha servido.
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Copiar un List en otro (Por valor no por referencia)
« Respuesta #3 en: 17 Febrero 2010, 13:35 pm »

Encontre mi proyecto de ejemplo :P
Si tienes esta clase (no importa que tenga propiedades, eventos, etc, se copia igual ;-)
Código
  1. Class Persona
  2.   Public Nombre as String
  3.   Public Apellido as String
  4. End Class
  5.  

Lo que haces es agregarle el atributo Serializable, y si quieres la interfaz IClonable que te agrega el metodo Clone (aunque no recuerdo porque no me funciono a mi, asi que implemente el metodo Clonar solo :P
No olvides de importar los espacios de nombres, son vitales para que funcione el codigo

Te quedaria asi

Código
  1. Imports System.Runtime.Serialization
  2. Imports System.Runtime.Serialization.Formatters.Binary
  3. Imports System.IO
  4.  
  5. <Serializable()> _
  6. Class Persona
  7.   Public Nombre as String
  8.   Public Apellido as String
  9.  
  10.   Public Function Clonar() As Persona
  11.   End Function
  12. End Class
  13.  

y en la funcion Clonar pones esto:

Código
  1.        Dim clon As Persona  ' Objeto donde se va a copiar por valor
  2.  
  3.        ' Serializadores, objeto en memoria
  4.        Dim formatter As IFormatter = New BinaryFormatter()
  5.        Dim str As Stream = New MemoryStream()
  6.  
  7.        formatter.Serialize(str, Me)  ' Copiamos a un stream en la memoria
  8.        str.Seek(0, SeekOrigin.Begin) ' Vamos al principio para volver a "leer"
  9.        clon = CType(formatter.Deserialize(str), Persona) ' Lo leemos y lo guardamos en el objeto "clonado"
  10.  
  11.        Return clon
  12.  

Por lo cual todo junto te quedaria asi:

Código
  1. Imports System.Runtime.Serialization
  2. Imports System.Runtime.Serialization.Formatters.Binary
  3. Imports System.IO
  4.  
  5. <Serializable()> _
  6. Class Persona
  7.   Public Nombre as String
  8.   Public Apellido as String
  9.  
  10.   Public Function Clonar() As Persona
  11.        Dim clon As Persona
  12.  
  13.        Dim formatter As IFormatter = New BinaryFormatter()
  14.        Dim str As Stream = New MemoryStream()
  15.  
  16.        formatter.Serialize(str, Me)
  17.        str.Seek(0, SeekOrigin.Begin)
  18.        clon = CType(formatter.Deserialize(str), Persona)
  19.  
  20.        Return clon
  21.   End Function
  22. End Class
  23.  

Tal vez alguno diga que tenga un par de bugs o algo asi. Nose, a mi me funciono  ;-) jeje

Espero que te sirva!

Nota: La funcion Clonar esa sirve literalmente para cualquier cosa, se puede adaptar para clonar cualquier clase del net framework (el unico requisito es que sea serializable ovbio no? :P)
« Última modificación: 17 Febrero 2010, 13:40 pm por raul338 » En línea

Skeletron


Desconectado Desconectado

Mensajes: 1.731


A long way to go


Ver Perfil WWW
Re: Copiar un List en otro (Por valor no por referencia)
« Respuesta #4 en: 18 Febrero 2010, 02:48 am »

Tio.. creo que existe el metodo CLONE o COPY en los arrays... ese metodo hace la COPIA.. sin referencia...
Si mal no recuerdo
En línea

raul338


Desconectado Desconectado

Mensajes: 2.633


La sonrisa es la mejor forma de afrontar las cosas


Ver Perfil WWW
Re: Copiar un List en otro (Por valor no por referencia)
« Respuesta #5 en: 18 Febrero 2010, 13:16 pm »

Solo en los arrays. El metodo que di funciona (sean arrays o no) para clases personalizadas uqe por defecto se copian por referencia
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
como cambiar valor de otro objeto?
Java
greenselves 1 4,000 Último mensaje 22 Marzo 2011, 19:00 pm
por Debci
[DUDA] paso por valor o por referencia (byval/ byref)
Programación Visual Basic
AlxSpy 8 4,447 Último mensaje 12 Julio 2011, 15:45 pm
por AlxSpy
Plasmar el valor de un programa en otro
Dudas Generales
daniel7885 0 1,712 Último mensaje 8 Junio 2015, 13:54 pm
por daniel7885
¿Las matrices se pasan a las funciones por valor o referencia? [C]
Programación C/C++
NOB2014 3 2,460 Último mensaje 6 Junio 2016, 14:51 pm
por NOB2014
Borrar nodos pasados por parametro valor/referencia
Programación C/C++
Beginner Web 6 2,131 Último mensaje 27 Diciembre 2018, 18:16 pm
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines