none
Clonar Listas genéricas RRS feed

  • Pregunta

  • Hola a todos,

     

    tengo un formulario que recibe una lista de objetos (colección de entidades), a través de una Property.

     

    Dicha lista la utilizo para cargar un Combo en el formulario, además añado valores a dicha lista.

     

    Como las listas se pasan por referencia, quiero evitar que se actualice la lista que originariamente me han pasado desde otro formulario.

     

    He utilizado una forma de Clonar la lista, existe alguna otra forma de hacerlo ? incluso más eficiente ?

     

    Saludos y gracias.

     

    'Public WriteOnly Property Aplicaciones() As List(Of Aplicacion)

    ' Set(ByVal value As List(Of Aplicacion))

    ' _aplicaciones = value

    ' End Set

    'End Property

     

    ' Clonar lista de Aplicaciones

    Public WriteOnly Property Aplicaciones() As List(Of Aplicacion)

    Set(ByVal value As List(Of Aplicacion))

    If value IsNot Nothing Then

    For Each aplicacion As Aplicacion In value

    _aplicaciones.Add(DirectCast(aplicacion.Clone(), Aplicacion))

    Next

    End If

    End Set

    End Property

     

    ...

    Dim aplicacionVacia As New Aplicacion

    aplicacionVacia.IDCampo = 0

    aplicacionVacia.Nombre = "Vacía"

     

    ' Clonar lista de aplicaciones para cargar el Combo

    _aplicaciones.Insert(0, aplicacionVacia)

    aplicacionBindingSource.DataSource = _aplicaciones

     

    cmbAplicaciones.DataSource = aplicacionBindingSource

    cmbAplicaciones.DisplayMember = "Nombre"

    cmbAplicaciones.ValueMember = "IDCampo"

     

     

    miércoles, 30 de julio de 2008 12:51

Respuestas

  • Hola,

    Una forma muy facil seria usar el metodo ToArray() de la lista para copiar los elementos en una nueva matriz

     

    miércoles, 30 de julio de 2008 14:42
  • Hola,

    Puedes crear una nueva lista a partir de otra simplemente con el constructor:

     

    Dim list1 As New List(Of MyApp)
    list1.Add(New MyApp(1, "app1"))
    list1.Add(New MyApp(1, "app1"))
    list1.Add(New MyApp(1, "app1"))
    Dim list2 As New List(Of MyApp)(list1)
    list1.Clear()
    list1.Add(New MyApp(4, "app4"))
    MessageBox.Show(list2.Count)

     

    Observa que aunque posteriormente vaciamos la lista 1 e incluso le agregamos un nuevo elemento, la lista2 permanece inmutable.

     

    Saludos,

    miércoles, 30 de julio de 2008 15:37
    Moderador

Todas las respuestas

  • Hola,

    Una forma muy facil seria usar el metodo ToArray() de la lista para copiar los elementos en una nueva matriz

     

    miércoles, 30 de julio de 2008 14:42
  • Hola,

    Puedes crear una nueva lista a partir de otra simplemente con el constructor:

     

    Dim list1 As New List(Of MyApp)
    list1.Add(New MyApp(1, "app1"))
    list1.Add(New MyApp(1, "app1"))
    list1.Add(New MyApp(1, "app1"))
    Dim list2 As New List(Of MyApp)(list1)
    list1.Clear()
    list1.Add(New MyApp(4, "app4"))
    MessageBox.Show(list2.Count)

     

    Observa que aunque posteriormente vaciamos la lista 1 e incluso le agregamos un nuevo elemento, la lista2 permanece inmutable.

     

    Saludos,

    miércoles, 30 de julio de 2008 15:37
    Moderador