Απάντηση: Τα αντικείμενα που μπορούν να διασχίσουν το foreach πρέπει να είναι αντικείμενα συλλογής ή πίνακα, τα οποία είναι του τύπου που υλοποιεί την υπερδιεπαφή IEnumerator ή τη δηλωμένη μέθοδο GetEnumerator Q: Αλλά όταν συνήθως χρησιμοποιώ το foreach in, το χρησιμοποιώ απευθείας και δεν υπάρχει πρόβλημα. Μπορώ να ρωτήσω, γιατί συμβαίνει αυτό; Εάν θέλετε να εφαρμόσετε τον τύπο της υπερδιεπαφής IEnumerator ή τη δηλωμένη μέθοδο GetEnumerator όπως αναφέρεται στην ερώτηση, τι πρέπει να κάνετε; Ευχαριστώ Απάντηση: Όταν χρησιμοποιούμε το foreach in, συνήθως χρησιμοποιούμε μια κλάση συλλογής που ορίζεται από το σύστημα (υλοποιώντας τη διεπαφή ICollection). Για παράδειγμα, arrayList, stringDictionary, array, κ.λπ. Αυτά συσκευάζονται από την πλατφόρμα και είναι κοντά στην εφαρμογή της διεπαφής IEnumerator. Για να μπορεί η κλάση που γράφετε ταυτόχρονα, πρέπει να εφαρμόσετε τη διεπαφή κατά τη σύνταξη της τάξης. Αυτό επιτρέπει τη διέλευση του καθενός στη συνέχεια. Για παράδειγμα, ορίστε μια κατηγορία ατόμων και εφαρμόστε τη διεπαφή IEnumerator. Εάν υπάρχει ένας πίνακας People[] tempPeople, τότε μπορείτε να χρησιμοποιήσετε: foreach( p in tempPeople){ console.writeline(p.name); Αυτό εξαλείφει το πρόβλημα της χρήσης για βρόχους. Όσο για τον τρόπο υλοποίησης της διεπαφής Iemumerator. Απλώς ελέγξτε το MSDN. Μπορείτε επίσης να αναζητήσετε ένα πιο χοντρό βιβλίο.
|