La lista genérica útil en VB.NET

click fraud protection

Los genéricos extienden el poder y la flexibilidad de VB.NET en muchas áreas, pero obtienes un mayor beneficio de rendimiento y más opciones de programación en el genérico Lista objeto [Lista (de T)] que con cualquier otro.

Usar Lista (de T), debe comprender cómo implementar los muchos métodos que proporciona .NET Framework. A continuación hay tres ejemplos usando Para cada, Encuentra todosy Ordenar, eso demuestra cómo el genérico Lista La clase funciona.

El primer paso es crear un genérico Lista. Puede obtener los datos de muchas maneras, pero la más simple es simplemente Añadir eso. ¡El siguiente código muestra cómo clasificar mi colección de cerveza y vino!

Código de inicio

Primero debe haber un objeto que represente una botella de la colección. En una aplicación de Windows Forms, la clase Form primero tiene que estar en un archivo o el diseñador de Visual Studio no funcionará correctamente, así que ponga esto al final:

Botella de clase pública. Marca pública como cadena. Nombre público como cadena. Categoría pública como cadena. Tamaño público como decimal. Public Sub New (_. ByVal m_Brand As String, _. ByVal m_Name como cadena, _. ByVal m_Category Como cadena, _. ByVal m_Size As Decimal) Marca = m_Brand. Nombre = m_Name. Categoría = m_Categoría. Tamaño = m_Size. End Sub. Clase final
instagram viewer

Para construir la colección, Añadir Los artículos. Esto es lo que hay en el Carga de formulario evento:

Dim Cabinet As List (Of Bottle) = _. "Nueva lista (de botella) Gabinete. Agregar (nueva botella (_. "Castle Creek", _. "Uintah Blanc", _. "Vino", 750)) Gabinete. Agregar (nueva botella (_. "Zion Canyon Brewing Company", _. "Springdale Amber Ale", _. "Cerveza", 355)) Gabinete. Agregar (nueva botella (_. "Viñedos del Valle Español", _. "Syrah", _. "Vino", 750)) Gabinete. Agregar (nueva botella (_. "Wasatch Beers", _. "Portero de poligamia", _. "Cerveza", 355)) Gabinete. Agregar (nueva botella (_. "Squatters Beer", _. "Provo Girl Pilsner", _. "Cerveza", 355))

Todo el código anterior es código estándar en VB.NET 1.0. Sin embargo, tenga en cuenta que al definir su propio Botella objeto, obtienes los beneficios de múltiples tipos en la misma colección (en este caso, ambos Cuerda y Decimal) y eficiente, escriba "encuadernación tardía" segura.

Por cada ejemplo

La diversión comienza cuando usamos los métodos. Para comenzar, implementemos lo familiar Para cada método. La documentación de Microsoft incluye esta definición de sintaxis de uso:

Dim instancia como lista Dim action como acción (Of T) instancia. ForEach (acción)

Microsoft define además acción como "delegar a un método que realiza una acción en el objeto que se le pasa. Los elementos de la Lista (T) actual se pasan individualmente al delegado de Acción (T) ".

Propina: Para más información sobre los delegados, lea Usar delegados en Visual Basic .NET para flexibilidad de tiempo de ejecución.

Lo primero que debe codificar es el método que se delegará. La incomprensión de este punto clave es la fuente de más de la confusión de los estudiantes de VB.NET. Esta función, o subrutina, es donde se realiza toda la codificación personalizada para los objetos de tipo "De".

Cuando se realiza correctamente, ya está hecho. Es realmente simple en este primer ejemplo. Una instancia completa de la Botella se pasa y la subrutina selecciona todo lo necesario fuera de ella. Codificando el Para cada en sí mismo es simple también. Simplemente complete la dirección del delegado usando el Dirección de método.

Sub displayBottle (ByVal b As Bottle) Lista de resultados. Artículos. Agregar (_ b. Marca y "-" y _ b. Nombre y "-" y _ b. Categoría y "-" y _ b. Tamaño) End Sub Private Sub ForEachButton_Click (... Lista de resultados. Artículos. Borrar () Lista de resultados. Artículos. Agregue ("Para cada ejemplo") ResultList. Artículos. Añadir ("") gabinete. ForEach (AddressOf displayBottle) End Sub

Ejemplo de FindAll

Encuentra todos Es un poco más complicado. La documentación de Microsoft para Encuentra todos Se ve como esto:

Dim instancia como List Dim match As Predicate (Of T) Dim returnValue As List (Of T) returnValue = instance. FindAll (partido)

Esta sintaxis incluye un nuevo elemento, Predicado (de T). Según Microsoft, esto representará el método "que define un conjunto de criterios y determina si el el objeto especificado cumple con esos criterios ". En otras palabras, puede crear cualquier código que encuentre algo en el lista. Codifiqué mi Predicado (de T) encontrar algo en la "cerveza" Categoría.

En lugar de llamar al código de delegado para cada elemento de la lista, Encuentra todos devuelve un entero Lista (T) que contiene solo las coincidencias que resultan de su Predicado (de T). Depende de su código definir ambos en este segundo Lista (T) y hacer algo con eso. Mi código solo agrega los elementos a un Cuadro de lista.

Private Sub FindAllButton_Click (remitente ByVal como sistema. Objeto, ByVal e como sistema. EventArgs) Maneja FindAllButton. Haga clic en ResultList. Artículos. Borrar () Lista de resultados. Artículos. Agregar ("Ejemplo de FindAll") ResultList. Artículos. Agregar ("") Sublista atenuada como sublista Lista (de botella) = Gabinete. FindAll (AddressOf findBeer) para cada r como botella en la sublista ResultList. Artículos. Añadir (_ r. Marca & "-" & _ r. Nombre & "-" & _ r. Categoría & "-" & _ r. Tamaño) Siguiente Fin Subfunción findBeer (ByVal b As Bottle) _ As Boolean If (b. Categoría = "Cerveza") Luego devuelve Verdadero Else Regresar Falso Fin Si Fin Función

Ordenar ejemplo

El método final que examina este artículo es Ordenar. Nuevamente, Microsoft usa alguna terminología con la que quizás no esté familiarizado. En realidad, hay cuatro sobrecargas diferentes de Ordenar método:

  • Ordenar()
  • Ordenar (IComparer (T))
  • Ordenar (Comparación (T))
  • Ordenar (Int32, Int32, IComparer (T))

Esto le permite usar los métodos de clasificación definidos en .NET Framework para la lista, codificar los suyos, usar un sistema comparación definida para el tipo, u ordenar parte de la colección usando una posición inicial y contar parámetro.

En este ejemplo, como uso la siguiente sintaxis para realizar el ordenamiento, estoy usando la tercera sobrecarga.

X. Nombre.x. Nombre. CompareTo (y. Nombre) (y. Nombre)

He codificado otro delegado a mi propio comparador. Como quiero ordenar por mi Nombre, Saco solo ese valor de cada instancia de la Botella objeto que se pasa y usa el Ordenar (Comparación )>)). los Ordenar método realmente reorganiza el original Lista (T). Eso es lo que se procesa después de ejecutar el método.

Private Sub SortButton_Click (remitente ByVal como sistema. Objeto, ByVal e como sistema. EventArgs) Maneja SortButton. Haga clic en ResultList. Artículos. Borrar () Lista de resultados. Artículos. Agregar ("Ordenar ejemplo") ResultList. Artículos. Añadir ("") gabinete. Ordenar (AddressOf sortCabinet) para cada r como botella en la lista de resultados del gabinete. Artículos. Añadir (_ r. Nombre & "-" & _ r. Marca & "-" & _ r. Categoría & "-" & _ r. Tamaño) Próximo fin Sub Función privada compartida sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) Como entero Retorno x. Nombre. CompareTo (y. Nombre) Función final

Estos métodos fueron seleccionados para demostrar las principales formas en que los métodos del Marco en Lista (T) En realidad están codificados. Sin embargo, hay toda una serie de otros métodos. Eso es lo que hace Lista (T) ¡tan útil!

instagram story viewer