Para borrar disponemos de los métodos Clear, Remove, RemoveAt, RemoveRange.
Borra el elemento con el índice indicado.
Coleccion.RemoveAt(1)
Borra los elementos que se indican, Cuantos, desde la posición indicada PosiciónInicial.
Coleccion.RemoveRange(PosiciónInicial, Cuantos)
Borra el primer elemento que sea igual al objeto de referencia.
Item.Nombre = "Silla"
Coleccion.Remove(Item)
También podemos borrar todo el contenido de la colección utilizando el método clear.
Colección.Clear()
Si deseamos saber la posición de un elemento, podemos utilizar el método indexOf.
Este método nos devuelve la posición del elemento en la colección, o el valor -1 si no lo encuentra.
La sintaxis es
Posicion = Coleccion.IndexOf(Item)
Console.WriteLine(Coleccion.IndexOf(Item))
Para la siguiente colección.
Sub Main()
Console.WriteLine("Carga colección de objetos.")
Dim Coleccion As New System.Collections.Generic.List(Of Datos)
Dim Item As New Datos
Item.Nombre = "Silla"
Coleccion.Add(Item)
Item = New Datos()
Item.Nombre = "Mesa"
Coleccion.Add(Item)
Dim x As Integer
While x < Coleccion.Count
Console.WriteLine(Coleccion.Item(x).Nombre)
x = x + 1
End While
End Sub
Un ejemplo :
Item = Coleccion.Item(0)
Console.WriteLine(Coleccion.IndexOf(Item))
Posicion = Coleccion.IndexOf(Item)
Console.WriteLine(Posicion)
La salida del ejemplo es cero en los dos casos.
Como peculiaridad hay que ver el siguiente ejemplo.
Item = New Datos
Item.Nombre = "Silla"
Console.WriteLine(Coleccion.IndexOf(Item))
Siendo que el elemento “Silla” existe en la colección previamente a la declaración del nuevo Item, el resultado de la salida será –1, no encontrado, y es que aunque el valor existe en la colección, el item declarado en si es nuevo, y no está en la misma, aunque su valor sea coincidente, es la única explicación coherente basada en

Dim Dato As Datos
For Each Dato In Coleccion
Console.WriteLine(Dato.Nombre)
Console.WriteLine(Dato.Nombre.GetHashCode)
Next
Item = New Datos
Item.Nombre = "Silla"
Console.WriteLine(Item.GetHashCode)
Console.WriteLine(Coleccion.IndexOf(Item))
Y en este otro ejemplo
Console.WriteLine("Antes")
Dim Dato As Datos
For Each Dato In Coleccion
Console.WriteLine("Valor {0} ", Dato.Nombre)
Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode)
Next
Console.WriteLine("Creación de item")
Item = New Datos
Item.Nombre = "Silla"
Console.WriteLine("HashCode {0} ", Item.GetHashCode)
Console.WriteLine("IndexOf {0} ", Coleccion.IndexOf(Item))
Console.WriteLine("Contains {0} ", Coleccion.Contains(Item))
Console.WriteLine("Despues")
Console.WriteLine("Adición de item")
Coleccion.Add(Item)
Console.WriteLine("HashCode {0} ", Item.GetHashCode)
Console.WriteLine("IndexOf {0} ", Coleccion.IndexOf(Item))
Console.WriteLine("Contains {0} ", Coleccion.Contains(Item))
Console.WriteLine("Bucle")
For Each Dato In Coleccion
Console.WriteLine("Valor {0} ", Dato.Nombre)
Console.WriteLine("HashCode {0} ", Dato.Nombre.GetHashCode)
Next
Console.ReadLine()
End Sub
End Module
Si nos fijamos en el hashcode, veremos que cuando está fuera de la colección tiene un valor distinto que cuando está dentro, que además es el mismo que el elemento con el mismo valor.
Ambos ejemplos arrancan con la misma carga de la colección previa.
Si este ejemplo le repetimos con datos de tipos estándar, el ejemplo sin embargo no se cumple, ¿por qué?, porque si yo busco el 2, o la “A” en una colección de enteros o de caracteres, el dos o está o no, pero porque es el número dos no es un objeto nuevo en una colección que contiene la misma información que otro elemento de la colección.
El dos o la “A”, pertenecen a la colección de los números enteros o de caracteres, ya de antemano, y existen o no en nuestra colección.
Síguenos en: Facebook Sobre aulaClic Política de Cookies