Usuario
clonar datos de una lista a otra?

Pregunta
-
hola a todos tengo una lista cargada con objetos de una clase que yo me cree, ahora bien, me quise copiar esos datos de la lista a otra, para manipularla, pero descubro que las listas se copian por referencia, es decir si yo hago: lista2=lista1; y si modifico la algun datos de la lista2, este mismo cambio se ve reflejado en la lista1, sin que yo hayga hecho nada especificamente en la lista1,por eso mi pregunta es: alguien sabe como clonar una lista a otra, pero sin que hayga esa referencia, que se copien los datos como valores no como referencia?pueden postear codigo, gracias
"La imaginacion es mas importante que el conocimiento." -> Albert Einstein
Todas las respuestas
-
Hola gblumen!
Haz esto ;)
List<MyClass> list1 = new List<MyClass>(); List<MyClass> list2 = new List<MyClass>(); list2 = list1.ToList();
Asi podras asignar la variable por VALOR y no por REFERENCIA
Saludos!
Marca la Respuesta como correcta si te es util.
MCPD - ASP.NET Developer 3.5
MCTS - .Net Framework 3.5, ASP.NET Applications 3.5, Silverlight 4 Development, SQL Server 2005
MCT - Web Development
Sigueme en Twitter: @MariojosePalma
Visita Mi Blog www.mariojosepalma.com -
-
pues no me funciono igual copia la lista por referencia, tuve que copiar los objetos de mi lista original en la otra, copiando sus atributos manualmente, dentro de un foreach, no me quedo de otra, silvrlight copia las listas siempre por referencia, espero les sirva este apunte, gracias
"La imaginacion es mas importante que el conocimiento." -> Albert Einstein
-
Parece que usted anda en busca de una copia profunda (deep copy). El método más efectivo y popular es serializar la colección y luego deserializar. Para que esto funcione, su clase MyClass debe marcarse con el atributo [Serializable]:
//Necesita estos espacios de nombre: using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; //Este es para el MemoryStream: using System.IO; //Asumo que hay una variable llamada 'lista' de tipo List<MyClass> lista para clonarse: IFormatter f = new BinaryFormatter(); List<MyClass> nuevaLista = null; using (Stream ms = new MemoryStream()) { f.Serialize(ms, lista); //Ahora se des-serializa, creando una copia profunda y 100% independiente: nuevaLista = f.Deserialize(ms) as List<MyClass>; }
Jose R. MCP
Code Samples