none
clonar datos de una lista a otra? RRS feed

  • 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

    viernes, 16 de noviembre de 2012 14:38

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

    viernes, 16 de noviembre de 2012 15:00
  • dejame probarlo y les aviso, me olvide decir qu estoy desarrollando en silverlight4, pruebo y les aviso, gracias por el aporte mariajose

    "La imaginacion es mas importante que el conocimiento." -> Albert Einstein

    viernes, 16 de noviembre de 2012 15:13
  • 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

    sábado, 17 de noviembre de 2012 15:26
  • 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

    sábado, 17 de noviembre de 2012 17:08