Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Απορία για Enumerator

Îåêßíçóå áðü ôï ìÝëïò DeClen. Τελευταία δημοσίευση από το μέλος KelMan στις 20-09-2007, 13:38. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  20-09-2007, 10:02 35171

    Απορία για Enumerator

    Παιδιά χαίρετε,

    Προσπαθώντας να κατανοήσω λίγο καλύτερα την χρησιμότητα των Generics έπεσα πάνω στην ένvοια του Enumerator (και κατ' επέκταση στα interfaces ΙΕnumerator και IEnumerable). Ομολογώ ότι με μπέρδεψε λίγο ο τρόπος που τα χρησιμοποιούμε.

    Ας πάρουμε για παράδειγμα κάτι που έχω στο μυαλό μου...

    Έστω ότι έχουμε ένα businness object  με την ονομασία Products. Μια λίστα για αυτό το αντικείμενο δημιουργείται ώς εξής

    1
    2
    3
    4
    5
    public class ProductsList: List<Products>
    {
       public ProductsList()
       {} //constructor
    }

    Υποθέτουμε ότι υπάρχει και κάποια συνάρτηση που "γεμίζει" αυτή τη λίστα με αντικείμενα. Διάβασα ότι τα παραπάνω interfaces χρησιμοποιούνται για να κάνουμε iteration στις λίστες. Στην παραπάνω λίστα μπορούμε να κάνουμε το εξής:

    1
    2
    3
    4
    5
    6
    ProductsList myList = FillThisList();

    Foreach(Products myProduct in myList)
    {
    UseSomehow(myProduct);
    }

    Έχει νόημα να χρησιμοποιήσουμε κάποιο από τα IEnumerator και IEnumerable interfaces στο παραπάνω παράδειγμα;

    Γενικότερα μια μικρή βοήθεια θα ήταν πολύτιμη.



  •  20-09-2007, 10:55 35175 σε απάντηση της 35171

    Απ: Απορία για Enumerator

    ... "απο κάτω", ήδη χρησιμοποιείς αυτά τα interfaces στον κώδικά σου. Ο compiler θα μετατρέψει το for each σου σε μια κλήση στο .GetEnumerator(). Απλώς, δεν το βλέπεις εσύ ποτέ γιατί είναι "syntactic sugar" το foreach.

    Angel
    O:]
  •  20-09-2007, 11:00 35177 σε απάντηση της 35171

    Απ: Απορία για Enumerator

    To IEnumerator δεν σου χρησιμεύει όταν δουλεύεις με generic collections.

    Με το IEnumerator μπορείς να κάνεις κάτι σαν το εξής:

    Dim peopleArray() As String = {"John", "Jim", "Sue"}
    Dim iEnum As IEnumerator = peopleArray.GetEnumerator()

    Do While iEnum.MoveNext
    Console.WriteLine(iEnum.Current.ToString)
    Loop

    Ρίξε μια ματιά εδώ: http://msdn2.microsoft.com/en-us/library/system.collections.ienumerator.aspx

    Όπως λέει και το άρθρο, με το For Each όλα γίνονται απλούστερα...


    Vir prudens non contra ventum mingit
  •  20-09-2007, 13:03 35182 σε απάντηση της 35177

    Απ: Απορία για Enumerator

    Χμμ, μάλιστα άρχισα να καταλαβαίνω τι γίνεται...Huh?

    Το "κακό" είναι ότι ψάχνοντας τα συγκεκριμένα interfaces έπεσα μάλλον κατευθείαν στα βαθιά. Τι εννοώ; Στο παράδειγμα που παραθέτω θα είχε νόημα η δήλωση;

    public class ProductsList: IEnumerable<Products>

    Το λέω αυτό, γιατί σε κάποια παραδείγματα που έχω ψάξει (πχ LINQ) είδα τις παρακάτω δηλώσεις

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //the class
    public class Person
    {
    public string MyName { get; set; }
    }

    //list persons
    List<Person> people = new List<Person>
    {
    new Person { MyName="Panos" }
    };

    //query
    IEnumerable<Person> queryResult = people.Where... κτλ.κτλ.

    Γιατί στην δήλωση του query δεν λέμε...

    1
    2
    //query
    List<Person> queryResult = people.Where... κτλ.κτλ.



  •  20-09-2007, 13:38 35183 σε απάντηση της 35182

    Απ: Απορία για Enumerator

    Θα μπορούσαμε να πούμε και το δεύτερο αλλά προφανώς δεν ενδιαφέρει (αυτόν που έγραψε το πρώτο το query) το queryResult να είναι List<Person>, δηλαδή να μην θέλει όλο το functionality που δίνει ένα List<> αλλά μόνο το functionality που δίνει το IEnumerable<>


    Vir prudens non contra ventum mingit
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems