Η χρήσιμη γενική λίστα στο VB.NET

Τα Generics επεκτείνουν τη δύναμη και την ευελιξία του VB.NET σε πολλές περιοχές, αλλά έχετε μεγαλύτερο όφελος από την απόδοση και περισσότερες επιλογές προγραμματισμού στο γενικό Λίστα αντικείμενο [Κατάλογος (Τ)] από ό, τι με οποιοδήποτε άλλο.

Χρησιμοποιώ Κατάλογος (Τ), πρέπει να κατανοήσετε τον τρόπο εφαρμογής των πολλών μεθόδων που παρέχει το .NET Framework. Παρακάτω παρατίθενται τρία παραδείγματα Για κάθε, FindAll, και Είδος, που δείχνει πώς το γενικό Λίστα τάξη έργα.

Το πρώτο βήμα είναι να δημιουργήσετε ένα γενικό Λίστα. Μπορείτε να πάρετε τα δεδομένα με πολλούς τρόπους, αλλά το απλούστερο είναι ακριβώς Προσθήκη το. Ο παρακάτω κώδικας δείχνει τον τρόπο ταξινόμησης της μπύρας και της συλλογής κρασιού!

Κωδικός εκκίνησης

Πρώτα πρέπει να υπάρχει ένα αντικείμενο που θα αντιπροσωπεύει ένα μπουκάλι από τη συλλογή. Σε μια εφαρμογή των Windows Forms, η φόρμα φόρμουλας πρέπει πρώτα να είναι σε αρχείο ή ο σχεδιαστής του Visual Studio δεν θα λειτουργήσει σωστά, οπότε τοποθετήστε το στο τέλος:

Μπουκάλι δημόσιας κλάσης. Δημόσια μάρκα ως συμβολοσειρά. Δημόσιο όνομα ως συμβολοσειρά. Δημόσια κατηγορία ως συμβολοσειρά. Δημόσιο μέγεθος ως δεκαδικό. Δημόσιο Νέο (_. ByVal m_Brand ως String, _. ByVal m_Name ως συμβολοσειρά, _. ByVal m_Category ως συμβολοσειρά, _. ByVal m_Size ως δεκαδική) Μάρκα = m_Brand. Όνομα = m_Name. Κατηγορία = m_Category. Μέγεθος = m_Size. End Sub. Τέλος κλάσης
instagram viewer

Για να δημιουργήσετε τη συλλογή, Προσθήκη τα αντικέιμενα. Αυτό είναι που είναι στο Φόρτωση φόρμας Εκδήλωση:

Dim Cabinet ως λίστα (από μπουκάλι) = _. "Νέα λίστα (από μπουκάλι) Υπουργικό συμβούλιο. Προσθήκη (Νέο μπουκάλι (_. "Castle Creek", _. "Uintah Blanc", _. "Κρασί", 750)) Υπουργικό συμβούλιο. Προσθήκη (Νέο μπουκάλι (_. "Εταιρεία ζυθοποιίας Zion Canyon", _. "Springdale Amber Ale", _. "Μπύρα", 355)) Υπουργικό συμβούλιο. Προσθήκη (Νέο μπουκάλι (_. "Ισπανικά αμπελώνες Valley", _. "Syrah", _. "Κρασί", 750)) Υπουργικό συμβούλιο. Προσθήκη (Νέο μπουκάλι (_. "Wasers Beers", _. "Polygamy Porter", _. "Μπύρα", 355)) Υπουργικό συμβούλιο. Προσθήκη (Νέο μπουκάλι (_. "Squatters Beer", _. "Provo κορίτσι Pilsner", _. "Μπύρα", 355))

Όλος ο παραπάνω κώδικας είναι τυποποιημένος κώδικας στο VB.NET 1.0. Ωστόσο, σημειώστε ότι ορίζοντας το δικό σας Μπουκάλι αντικείμενο, θα έχετε τα πλεονεκτήματα πολλών τύπων στην ίδια συλλογή (στην περίπτωση αυτή και τα δύο Σειρά και Δεκαδικός) και αποτελεσματική, τύπου ασφαλής "καθυστερημένη σύνδεση."

Για παράδειγμα

Η διασκέδαση ξεκινά όταν χρησιμοποιούμε τις μεθόδους. Για να ξεκινήσουμε, ας εφαρμόσουμε το γνωστό Για κάθε μέθοδος. Η τεκμηρίωση της Microsoft περιλαμβάνει αυτόν τον ορισμό σύνταξης χρήσης:

Δημιουργία στιγμιότυπου ως Απεικόνιση Δράσης ως Δράση Ενέργειας (Από Τ). ForEach (δράση)

Η Microsoft ορίζει περαιτέρω δράση ως "εκχωρούν σε μια μέθοδο που εκτελεί μια ενέργεια για το αντικείμενο που έχει περάσει σε αυτήν. Τα στοιχεία της τρέχουσας λίστας (Τ) διαβιβάζονται ξεχωριστά στον εκπρόσωπο της δράσης (Τ). "

Υπόδειξη: Για περισσότερα σχετικά με τους αντιπροσώπους, διαβάστε Χρησιμοποιώντας τους εκπροσώπους του Visual Basic .NET για την ευελιξία κατά την εκτέλεση.

Το πρώτο πράγμα που πρέπει να κωδικοποιήσετε είναι η μέθοδος που θα μεταβιβαστεί. Η παρεξήγηση αυτού του ενός βασικού σημείου είναι η πηγή του πλέον της σύγχυσης των φοιτητών VB.NET. Αυτή η λειτουργία ή υπορουτίνα είναι εκεί όπου γίνεται η εξατομικευμένη κωδικοποίηση για τα αντικείμενα τύπου "Of".

Όταν εκτελείται σωστά, ουσιαστικά κάνετε. Είναι απλό σε αυτό το πρώτο παράδειγμα. Μια ολόκληρη παρουσία του Μπουκάλι περάσει και η υπορουτίνα επιλέγει οτιδήποτε χρειάζεται από αυτό. Κωδικοποίηση του Για κάθε Το ίδιο είναι απλό. Απλά συμπληρώστε τη διεύθυνση του αντιπροσώπου χρησιμοποιώντας το AddressOf μέθοδος.

Sub displayBottle (ByVal b ως μπουκάλι) Λίστα αποτελεσμάτων. Στοιχεία. Προσθέστε (_ b. Μάρκα & "-" & _ b. Όνομα & "-" & _ b. Κατηγορία & "-" & _ b. Μέγεθος) End Sub Private Sub ForEachButton_Click (... Λίστα αποτελεσμάτων. Στοιχεία. Διαγραφή () Λίστα αποτελεσμάτων. Στοιχεία. Προσθέστε ("Για κάθε παράδειγμα") Λίστα αποτελεσμάτων. Στοιχεία. Προσθήκη ("") Υπουργικού Συμβουλίου. ForEach (AddressOf displayBottle) End Sub

Βρείτε όλα τα παραδείγματα

FindAll είναι λίγο πιο περίπλοκο. Η τεκμηρίωση της Microsoft για το FindAll μοιάζει με αυτό:

Δημιουργία στιγμιότυπου As List Dim match Όπως Predicate (Από T) Dim returnValue ως λίστα (από T) returnValue = παράδειγμα. FindAll (αντιστοιχία)

Αυτή η σύνταξη περιλαμβάνει ένα νέο στοιχείο, Πρόβλεψη (Τ). Σύμφωνα με τη Microsoft, αυτό θα αντιπροσωπεύει τη μέθοδο "που ορίζει μια σειρά κριτηρίων και καθορίζει εάν το συγκεκριμένο αντικείμενο πληροί αυτά τα κριτήρια. "Με άλλα λόγια, μπορείτε να δημιουργήσετε κώδικα που θα βρει κάτι στο λίστα. Κωδικοποίησα μου Πρόβλεψη (Τ) για να βρείτε κάτι στο "Beer" Κατηγορία.

Αντί να καλέσετε τον κωδικό πληρεξουσίου για κάθε στοιχείο στη λίστα, FindAll επιστρέφει ένα ολόκληρο Λίστα (Τ) που περιέχει μόνο τους αγώνες που προκύπτουν από το δικό σας Πρόβλεψη (Τ). Εξαρτάται από τον κωδικό σας για να ορίσετε και αυτό το δευτερόλεπτο Λίστα (Τ) και κάνετε κάτι με αυτό. Ο κώδικας μου προσθέτει μόνο τα στοιχεία σε ένα ListBox.

Private Sub FindAllButton_Click (ByVal αποστολέας ως σύστημα. Αντικείμενο, ByVal e ως σύστημα. EventArgs) Λαβές FindAllButton. Κάντε κλικ στο Λίσκο αποτελεσμάτων. Στοιχεία. Διαγραφή () Λίστα αποτελεσμάτων. Στοιχεία. Προσθέστε ("Find All Example") ResultList. Στοιχεία. Προσθέστε ("") τη λίστα υπομνήματος Dim As List (Of Bottle) sublist = Cabinet. FindAll (AddressOf findBeer) Για κάθε r Ως μπουκάλι στην υποεντολή ResultList. Στοιχεία. Προσθέστε (_ r. Μάρκα & "-" & _ r. Όνομα & "-" & _ r. Κατηγορία & "-" & _ r. Μέγεθος) Επόμενο Τέλος Υπο Λειτουργία findBeer (ByVal b ως μπουκάλι) _ Ως Boolean Εάν (β. Κατηγορία = "Beer") Στη συνέχεια επιστρέψτε True Else Return False End If End Function

Παράδειγμα ταξινόμησης

Η τελική μέθοδος που εξετάζει αυτό το άρθρο είναι Είδος. Και πάλι, η Microsoft χρησιμοποιεί κάποια ορολογία που μπορεί να μην γνωρίζετε. Υπάρχουν πράγματι τέσσερις διαφορετικές υπερφορτώσεις του Είδος μέθοδος:

  • Είδος()
  • Ταξινόμηση (IComparer (T))
  • Ταξινόμηση (Σύγκριση (Τ))
  • Ταξινόμηση (Int32, Int32, IComparer (T))

Αυτό σας επιτρέπει να χρησιμοποιήσετε μεθόδους ταξινόμησης που ορίζονται στο .NET Framework για τη λίστα, κωδικοποιήστε τη δική σας, χρησιμοποιήστε ένα σύστημα προσδιορισμένη σύγκριση για τον τύπο ή το είδος της συλλογής με τη χρήση θέσης εκκίνησης και μέτρησης παράμετρο.

Σε αυτό το παράδειγμα, δεδομένου ότι χρησιμοποιώ την ακόλουθη σύνταξη για την πραγματική εκτέλεση του είδους, χρησιμοποιώ την τρίτη υπερφόρτωση.

Χ. Name.x. Ονομα. CompareTo (y. Όνομα) (γ. Ονομα)

Έχω κωδικοποιήσει έναν άλλο εκπρόσωπο στο δικό μου συγκριτικό. Δεδομένου ότι θέλω να ταξινομήσω με το δικό μου Ονομα, Τραβιέρω απλά αυτή την αξία από κάθε εμφάνιση του Μπουκάλι αντικείμενο που έχει περάσει και χρησιμοποιήστε το Ταξινόμηση (Σύγκριση )>)). ο Είδος η μέθοδος αναδιατάσσει το πρωτότυπο Λίστα (Τ). Αυτό γίνεται μετά την εκτέλεση της μεθόδου.

Ιδιωτικό Sub SortButton_Click (ByVal αποστολέας ως σύστημα. Αντικείμενο, ByVal e ως σύστημα. EventArgs) Λαβές SortButton. Κάντε κλικ στο Λίσκο αποτελεσμάτων. Στοιχεία. Διαγραφή () Λίστα αποτελεσμάτων. Στοιχεία. Προσθέστε ("Παράδειγμα ταξινόμησης") Λίστα αποτελεσμάτων. Στοιχεία. Προσθήκη ("") Υπουργικού Συμβουλίου. Ταξινόμηση (AddressOf sortCabinet) Για κάθε r Ως μπουκάλι στο Cabinet ResultList. Στοιχεία. Προσθέστε (_ r. Όνομα & "-" & _ r. Μάρκα & "-" & _ r. Κατηγορία & "-" & _ r. Μέγεθος) Επόμενο Τέλος Υπο Ιδιωτική Κοινόχρηστη Λειτουργία sortCabinet (_ ByVal x ως Μπουκάλι, ByVal y ως Μπουκάλι) ως Ακέραιος Επιστροφή x. Ονομα. CompareTo (y. Όνομα) Λήξη Λειτουργία

Αυτές οι μέθοδοι επελέγησαν για να επιδείξουν τους κύριους τρόπους με τους οποίους οι μέθοδοι πλαισίου στο Λίστα (Τ) είναι στην πραγματικότητα κωδικοποιημένα. Υπάρχει όμως μια ολόκληρη σειρά άλλων μεθόδων. Αυτό είναι που κάνει Λίστα (Τ) τόσο χρήσιμο!