Info

La liste générique utile dans VB.NET

La liste générique utile dans VB.NET

Les génériques étendent la puissance et la flexibilité de VB.NET dans de nombreux domaines, mais vous obtenez un avantage en termes de performances plus important et plus d'options de programmation dans le générique. liste objet Liste (de T) qu'avec n'importe quel autre.

Utiliser Liste (de T), vous devez comprendre comment implémenter les nombreuses méthodes fournies par le .NET Framework. Voici trois exemples utilisant Pour chaque, Trouver tout, et Trier, qui montre comment le générique liste travaux de classe.

La toute première étape consiste à créer un générique liste. Vous pouvez obtenir les données de nombreuses façons, mais le plus simple est de simplement Ajouter il. Le code ci-dessous montre comment classer ma collection de bières et de vins!

Code de départ

Tout d'abord, il doit exister un objet représentant une bouteille de la collection. Dans une application Windows Forms, la classe Form doit d'abord être dans un fichier ou le concepteur de Visual Studio ne fonctionnera pas correctement. Mettez donc ceci à la fin:

Classe publique Bottle Public Marque As String Nom Public As String Catégorie Public String Taille publique Décimale Public Sub Nouveau (_ ByVal m_Brand As String, _ ByVal m_Name As String, _ ByVal m_Category As String, _ ByVal m_Size As Decimal) Brand = m_Brand Nom = m_Name Catégorie = m_Category Taille = m_Size End Sub End Class

Pour construire la collection, Ajouter Les objets. C'est ce qu'il y a dans le Charge de formulaire un événement:

Dim Cabinet As List (Of Bottle) = _ "Nouvelle liste (Of Bottle) Cabinet.Add (Nouvelle bouteille (_" Castle Creek ", _" Castle Creek "), _" Uintah Blanc ", _" Wine ", 750)) Cabinet.Add (Nouvelle bouteille (_ "Zion Canyon Brewing Company", _ "Springdale Amber Ale", _ "Bière", 355)) Cabinet.Add (Nouvelle bouteille (_ "Spanish Valley Vineyards", _ "Syrah", _ "Vin", 750) ) Cabinet.Add (Nouvelle bouteille (_ "Wasatch Beers", _ "Polygamy Porter", _ "Bière", 355)) Cabinet.Add (Nouvelle bouteille (_ "Squatters Beer", _ "Provo Girl Pilsner", _ " Bière ", 355))

Tout le code ci-dessus est un code standard dans VB.NET 1.0. Notez cependant qu'en définissant votre propre Bouteille objet, vous bénéficiez des avantages de plusieurs types dans la même collection (dans ce cas, les deux Chaîne et Décimal) et efficace, tapez safe "tardive binding".

Pour chaque exemple

Le plaisir commence lorsque nous utilisons les méthodes. Pour commencer, implémentons le familier Pour chaque méthode. La documentation de Microsoft inclut cette définition de syntaxe d'utilisation:

Dim instance comme liste Dim action comme action (Of T) instance.ForEach (action)

Microsoft définit en outre action en tant que "déléguer à une méthode qui effectue une action sur l'objet qui lui est transmis. Les éléments de la liste actuelle (T) sont individuellement transmis au délégué Action (T)".

Pointe: Pour plus d'informations sur les délégués, consultez la rubrique Utilisation de délégués dans Visual Basic .NET pour la flexibilité d'exécution.

La première chose à coder est la méthode qui sera déléguée. Le malentendu sur ce point clé est la source de plus de la confusion des étudiants de VB.NET. Cette fonction, ou sous-routine, est l'endroit où tous les codages personnalisés pour les objets de type "Of" sont effectués.

Lorsque effectué correctement, vous avez essentiellement terminé. C'est très simple dans ce premier exemple. Une instance entière du Bouteille est passé et le sous-programme sélectionne tout ce dont il a besoin. Codant le Pour chaque lui-même est simple aussi. Il suffit de renseigner l'adresse du délégué en utilisant le Adresse de méthode.

Sub displayBottle (ByVal b As Bottle) ResultList.Items.Add (_ b.Brand & "-" & _ b.Name & "-" & _ b.Category & "-" & _ b.Size) End Sub Private Sub ForEachButton_Click (… ResultList.Items.Clear () ResultList.Items.Add ("Pour chaque exemple") ResultList.Items.Add ("--------------------- - ") Cabinet.ForEach (AddressOf displayBottle) End Sub

FindAll Exemple

Trouver tout est un peu plus compliqué. La documentation Microsoft pour Trouver tout ressemble à ça:

Dim instance en tant que liste Dim match en tant que prédicat (de T) Dim returnValue En tant que liste (de T) returnValue = instance.FindAll (match)

Cette syntaxe comprend un nouvel élément, Prédicat (de T). Selon Microsoft, cela représentera la méthode "qui définit un ensemble de critères et détermine si l'objet spécifié répond à ces critères". En d'autres termes, vous pouvez créer n'importe quel code qui trouvera quelque chose dans la liste. J'ai codé mon Prédicat (de T) trouver quoi que ce soit dans la "bière" Catégorie.

Au lieu d’appeler le code délégué pour chaque élément de la liste, Trouver tout renvoie un entier Liste (T) ne contenant que les allumettes qui résultent de votre Prédicat (de T). C'est à votre code de définir à la fois cette seconde Liste (T) et faire quelque chose avec elle. Mon code ajoute simplement les éléments à un ListBox.

Private Sub FindAllButton_Click (expéditeur de ByVal en tant que System.Object, ByVal et en tant que System.EventArgs) gère FindAllButton.Click ResultList.Items.Clear () ResultList.Items.Add ("FindAll Example") ResultList.Items.Add ("--- -------------------- ") Dim sublist As List (Of Bottle) sublist = Cabinet.FindAll (AddressOf findBeer) Pour chaque r as Bottle dans la sous-liste ResultList.Items. Ajoutez (_r.Brand & "-" & _r.Name & "-" & _ r.Category & "-" & _ r.Size) Next End Sub function findBeer (ByVal b comme une bouteille) _ As Boolean If ( b.Category = "Beer") Puis retournez True Else Renvoie False End If End Function

Exemple de tri

La méthode finale que cet article examine est Trier. Encore une fois, Microsoft utilise une terminologie que vous ne connaissez peut-être pas. Il y a en fait quatre surcharges différentes du Trier méthode:

  • Trier()
  • Trier (IComparer (T))
  • Trier (Comparaison (T))
  • Trier (Int32, Int32, IComparer (T))

Cela vous permet d'utiliser les méthodes de tri définies dans le .NET Framework pour la liste, de coder les vôtres, d'utiliser une comparaison définie par le système pour le type ou de trier une partie de la collection à l'aide d'un paramètre position et nombre de départ.

Dans cet exemple, puisque j'utilise la syntaxe suivante pour effectuer le tri, j'utilise la troisième surcharge.

x.Name.x.Name.CompareTo (y.Name) (y.Name)

J'ai codé un autre délégué sur mon propre comparateur. Depuis que je veux trier par mon prénom, Je tire juste cette valeur de chaque instance de la Bouteille objet qui est passé et utilise le Trier (Comparaison <(Of)>)). le Trier méthode réorganise réellement l'original Liste (T). C'est ce qui est traité après l'exécution de la méthode.

Private Sub SortButton_Click (expéditeur de ByVal en tant que System.Object, ByVal e en tant que System.EventArgs) gère SortButton.Click ResultList.Items.Clear () ResultList.Items.Add ("Exemple de tri") ResultList.Items.Add ("--- -------------------- ") Cabinet.Sort (AddressOf sortCabinet) pour chaque r comme une bouteille dans l'armoire ResultList.Items.Add (_ r.Name &" - ​​" & _ r.Brand & "-" & _ r.Category & "-" & _ r.Size) Next End Sub Private Fonction partagée sortCabinet (_ ByVal x As Bottle, ByVal y As Bottle) As Integer Renvoie x.Nom. CompareTo (y.Name) End Function

Ces méthodes ont été sélectionnées pour démontrer les principales façons dont les méthodes du cadre Liste (T) sont réellement codés. Il y a tout un tas d'autres méthodes, cependant. C'est ce qui fait Liste (T) si utile!