Το C# 7.0 έχει κυκλοφορήσει εδώ και λίγο καιρό και όλοι γνωρίζουν ότι υπάρχει βελτιστοποίηση για πλειάδες στη νέα δυνατότητα: ValueTuple. Ακολουθούν λεπτομερή παραδείγματα για να εξηγήσετε το Tuple VS ValueTuple σε 10 λεπτά για να κατανοήσετε καλύτερα τα οφέλη και τη χρήση του ValueTuple.
Εάν γνωρίζετε αρκετά για το Tuple, μπορείτε να παραλείψετε την ενότητα "Review Tuple" και να μεταβείτε κατευθείαν στην ενότητα "ValueTuple Explained" για να δείτε την εκθαμβωτική χρήση των πλειάδων τιμών.
Κοιτάξτε πίσω στο Tuple
Το Tuple είναι μια νέα δυνατότητα που κυκλοφόρησε με C# 4.0 και είναι διαθέσιμη σε .Net Framework 4.0 και νεότερη έκδοση.
Η πλειάδα είναι μια δομή δεδομένων με συγκεκριμένο αριθμό και ακολουθία στοιχείων. Για παράδειγμα, σχεδιάστε μια τριπλή δομή δεδομένων για την αποθήκευση πληροφοριών μαθητών, η οποία περιέχει συνολικά τρία στοιχεία, το πρώτο είναι το όνομα, το δεύτερο είναι η ηλικία και το τρίτο είναι το ύψος.
Οι συγκεκριμένες χρήσεις των πλειάδων είναι οι εξής:
1. Πώς να δημιουργήσετε μια πλειάδα
Προεπιλογή. Πλαίσιο δικτύουΟι πλειάδες υποστηρίζουν μόνο 1 έως 7 στοιχεία πλειάδαςΕάν υπάρχουν 8 ή περισσότερα στοιχεία, πρέπει να χρησιμοποιήσετε τις ιδιότητες ένθεσης και ανάπαυσης του Tuple για να το εφαρμόσετε. Επιπλέον, η κλάση Tuple παρέχει μια στατική μέθοδο για τη δημιουργία αντικειμένων πλειάδας.
Δημιουργήστε πλειάδες χρησιμοποιώντας κατασκευαστές:
Κατασκευάστε πλειάδες χρησιμοποιώντας τη στατική μέθοδο Tuple, υποστηρίζοντας έως και οκτώ στοιχεία:
Note: Ο τύπος πλειάδας που κατασκευάζεται εδώ είναι στην πραγματικότητα Tuple<int, int, int, int, Tuple<int>>, επομένως ο τύπος δεδομένων που λαμβάνεται από το testTuple8.Rest είναι Tuple<int>, επομένως για να λάβετε την ακριβή τιμή, πρέπει να πάρετε την ιδιότητα Item1.
2. Αντιπροσωπεύει ένα σύνολο δεδομένων Δημιουργήστε μια πλειάδα παρακάτω για να αναπαραστήσετε τρεις πληροφορίες για έναν μαθητή: όνομα, ηλικία και ύψος, χωρίς να δημιουργήσετε μια επιπλέον τάξη ξεχωριστά.
3. Επιστρέψτε πολλαπλές τιμές από μια μέθοδο Όταν μια συνάρτηση χρειάζεται να επιστρέψει πολλές τιμές, η παράμετρος out μπορεί γενικά να χρησιμοποιηθεί και οι πλειάδες μπορούν να χρησιμοποιηθούν αντί για out για την επιστροφή πολλαπλών τιμών.
4. Μεταφορά πολλαπλών τιμών για μεθόδους μίας παραμέτρου
Όταν η παράμετρος συνάρτησης είναι μόνο ένας τύπος αντικειμένου, μπορούν να μεταβιβαστούν πολλές τιμές παραμέτρων χρησιμοποιώντας την υλοποίηση πλειάδας.
Παρά τις προαναφερθείσες εύχρηστες μεθόδους, οι πλειάδες έχουν επίσης σημαντικές ελλείψεις:
- Κατά την πρόσβαση σε στοιχεία, μπορείτε να έχετε πρόσβαση σε αυτά μόνο μέσω του ItemX και πρέπει να διευκρινίσετε τη σειρά των στοιχείων πριν από τη χρήση και τα ονόματα των χαρακτηριστικών δεν έχουν πρακτική σημασία, κάτι που είναι άβολο να θυμάστε.
- Υπάρχουν έως και οκτώ στοιχεία, και αν θέλετε περισσότερα, μπορείτε να επεκταθείτε μόνο με ένθεση με το τελευταίο στοιχείο.
- Η πλειάδα είναι ένας τύπος αναφοράς, όχι ένας τύπος τιμής όπως άλλοι απλοί τύποι, ο οποίος εκχωρεί χώρο στο σωρό και μπορεί να έχει πάρα πολλές εργασίες δημιουργίας και κατανομής όταν η CPU είναι εντατική.
Επομένως, ένας νέος τύπος ValueTuple εισήχθη στο C# 7.0, ο οποίος περιγράφεται λεπτομερώς στις ακόλουθες ενότητες.
Το ValueTuple εξηγεί λεπτομερώς
Το ValueTuple είναι ένα από τα νέα χαρακτηριστικά του C# 7.0, διαθέσιμο για .Net Framework 4.7 και νεότερη έκδοση.
Το ValueTuple δεν απαιτεί 4.7, εφόσον το nuget είναι εντάξει, το 4.7 είναι ενσωματωμένο. Επιπλέον, το ValueTuple είναι ένας τύπος δομής, η Microsoft συνιστά να μην χρησιμοποιείτε δομές άνω των 64 byte, κάτι που είναι επίσης αποτελεσματικό για το ValueTuple.
Μια πλειάδα τιμών είναι επίσης μια δομή δεδομένων που χρησιμοποιείται για να αναπαραστήσει έναν συγκεκριμένο αριθμό και ακολουθία στοιχείων, αλλά διαφέρει από μια κλάση πλειάδας, με τις ακόλουθες κύριες διαφορές:
Μια πλειάδα τιμών είναι μια δομή, ένας τύπος τιμής, όχι μια κλάση, ενώ μια πλειάδα είναι μια κλάση, ένας τύπος αναφοράς. Τα στοιχεία πλειάδας τιμών είναι μεταβλητά, όχι μόνο για ανάγνωση, δηλαδή μπορούν να αλλάξουν την τιμή του στοιχείου στην πλειάδα τιμών. Μια πλειάδα τιμών μελών δεδομένων είναι ένα πεδίο και όχι ένα χαρακτηριστικό. Η συγκεκριμένη χρήση των πλειάδων τιμών είναι η εξής:
1. Πώς να δημιουργήσετε μια πλειάδα αξίας Όπως και οι πλειάδας, οι πλειάδες τιμών .Net Framework υποστηρίζουν μόνο 1 έως 7 στοιχεία πλειάδας και εάν υπάρχουν 8 στοιχεία ή περισσότερα, πρέπει να χρησιμοποιήσετε τις ιδιότητες ένθετων και Rest της πλειάδας τιμών για να το εφαρμόσετε. Επιπλέον, η κλάση ValueTuple μπορεί να παρέχει στατικές μεθόδους για τη δημιουργία αντικειμένων πλειάδας τιμών.
Δημιουργήστε πλειάδες χρησιμοποιώντας κατασκευαστές:
Κατασκευάστε πλειάδες χρησιμοποιώντας τη στατική μέθοδο Tuple, υποστηρίζοντας έως και οκτώ στοιχεία:
Σημειώστε ότι ο τύπος πλειάδας που κατασκευάζεται εδώ είναι στην πραγματικότητα Tuple<int, int, <int>>, επομένως ο τύπος δεδομένων που λαμβάνεται από το testTuple8.Rest είναι Tuple<int>, επομένως για να λάβετε την ακριβή τιμή, πρέπει να πάρετε την ιδιότητα Item1.
Διαφορά βελτιστοποίησης:Όταν κατασκευάζεται μια πλειάδα τιμών με περισσότερα από 7 στοιχεία, οι τιμές στην ένθετη πλειάδα μπορούν να προσπελαστούν χρησιμοποιώντας το ακόλουθο ItemX και, για το παραπάνω παράδειγμα, για πρόσβαση στο δέκατο στοιχείο, είτε μέσω testTuple10.Rest.Item3 είτε testTuple10.Item10.
2. Αντιπροσωπεύει ένα σύνολο δεδομένων Δημιουργήστε μια πλειάδα τιμών για να αντιπροσωπεύσετε τρεις πληροφορίες για έναν μαθητή: όνομα, ηλικία και ύψος χωρίς να δημιουργήσετε μια επιπλέον τάξη ξεχωριστά.
3. Επιστρέψτε πολλαπλές τιμές από μια μέθοδο Οι πλειάδες τιμών μπορούν επίσης να επιστρέψουν πολλαπλές τιμές στη θέση της παραμέτρου out στον ορισμό της συνάρτησης.
Διαφορά βελτιστοποίησης:Η τιμή επιστροφής μπορεί να καθοριστεί στο ValueTuple ανεξήγητα, χρησιμοποιώντας μια νέα σύνταξη (,,), όπως (string, int, uint):
Ο εντοπισμός σφαλμάτων του τύπου studentInfo είναι η τριπλέτα ValueType.
Διαφορά βελτιστοποίησης:Η τιμή επιστροφής μπορεί να καθορίσει το όνομα του στοιχείου για να διευκολύνει την κατανόηση της εκχώρησης μνήμης και της πρόσβασης:
Βολική εκχώρηση μνήμης:
4. Μεταφορά πολλαπλών τιμών για μεθόδους μίας παραμέτρου Όταν μια παράμετρος συνάρτησης είναι μόνο ένας τύπος αντικειμένου, μπορούν να μεταβιβαστούν πολλές τιμές χρησιμοποιώντας την υλοποίηση πλειάδας τιμών.
5. Αποδομήστε το ValueTuple Μπορείτε να χρησιμοποιήσετε var (x, y) ή (var x, var y) για να επιλύσετε στοιχεία πλειάδας για να κατασκευάσετε τοπικές μεταβλητές, ενώ χρησιμοποιείτε το σύμβολο "_" για να αγνοήσετε ανεπιθύμητα στοιχεία.
Όπως αναφέρθηκε παραπάνω, το ValueTuple κάνει τη C# απλούστερη και ευκολότερη στη χρήση. Τα κύρια πλεονεκτήματα έναντι του Tuple είναι τα εξής:
- Το ValueTuple υποστηρίζει μια νέα σύνταξη για τις τιμές επιστροφής συναρτήσεων" (,,)", κάνοντας τον κώδικα απλούστερο.
- Θα πρέπει να σημειωθεί εδώ ότι παρόλο που ονομάζεται, αλλά στην πραγματικότητα η πλειάδα τιμών δεν ορίζει το χαρακτηριστικό ή το πεδίο ενός τέτοιου ονόματος, το πραγματικό όνομα εξακολουθεί να είναι ItemX και όλα τα ονόματα στοιχείων χρησιμοποιούνται μόνο κατά τη διάρκεια του σχεδιασμού και της μεταγλώττισης, όχι κατά το χρόνο εκτέλεσης (οπότε δώστε προσοχή στις λειτουργίες σειριοποίησης και αποσειριοποίησης αυτού του τύπου).
- Μερικές ή όλες οι πλειάδες στοιχείων μπορούν να χρησιμοποιηθούν πιο βολικά χρησιμοποιώντας μεθόδους καταστροφής.
- Οι πλειάδες τιμών είναι τύποι τιμών, οι οποίοι είναι πιο αποτελεσματικοί στη χρήση από τις πλειάδες τύπων αναφοράς και οι πλειάδες τιμών έχουν μια μέθοδο σύγκρισης που μπορεί να χρησιμοποιηθεί για να συγκριθεί εάν είναι ίσες, δείτε Λεπτομέρειες:https://msdn.microsoft.com/en-us/library/system.valuetuple
|