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

 

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

System.Collections

Îåêßíçóå áðü ôï ìÝëïò Τάσκος Γιώργος. Τελευταία δημοσίευση από το μέλος Τάσκος Γιώργος στις 28-09-2008, 20:08. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-09-2008, 16:32 44943

    System.Collections

    Καλησπέρα σε ολους.

    Ψάχνοντας τις τεχνικές που κρύβουν τα Collections, και δημιουργώντας ένα παράδειγμα δικό μου,
    ενώ για κάποιο λόγο δεν βρίσκω κάποιο λάθος, δεν μπορώ να προβάλλω τα στοιχεία που κάνω Add().

    Παραθέτω τον κώδικα ποιο κάτω αν θέλει κάποιος να μου υποδείξει τι δεν κάνω σωστά! ή πως θα έπρεπε να
    κατευθυνθώ.



    public class Person
    {
    private string name;
    private int age;

    public string Name
    {
    get
    {
    return name;
    }
    set
    {
    name = value;
    }
    }

    public int Age
    {
    get
    {
    return age;
    }
    set
    {
    age = value;
    }
    }



    public class People : DictionaryBase
    {
    public void Add(string nameID, Person newPerson)
    {
    Dictionary.Add(nameID, newPerson);
    }

    public void Remove(string nameID)
    {
    Dictionary.Remove(nameID);
    }

    public Person this[string nameID]
    {
    get
    {
    return (Person)Dictionary[nameID];
    }
    set
    {
    Dictionary[nameID] = value;
    }
    }

    public new IEnumerator GetEnumerator()
    {
    foreach (object Person in Dictionary.Values)
    yield return (Person)Person;
    }

    }




    class Program
    {
    static void Main(string[] args)
    {
    People peopleCollection = new People();
    Person newPerson = new Person();

    Console.WriteLine("Give 3 Person names and ages.");
    for (int i = 1; i <= 3; i++)
    {
    Console.Write("{0} Name : ", i);
    newPerson.Name = Console.ReadLine();
    Console.Write("{0} Age : ", i);
    newPerson.Age = Convert.ToInt32(Console.ReadLine());
    peopleCollection.Add(newPerson.Name, newPerson);
    }

    Console.WriteLine("All Info about people collections.");
    foreach (People p in peopleCollection)
    {
    Console.WriteLine("Name : {0}\nAge : {1}",
    p.Name, p.Age);
    }
    Console.ReadKey();
    }
    }





    Είναι ένα απλό παράδειγμα που χρησιμοποιεί την DictionaryBase για να έχω την δυνατότητα ενός (string key) στο Collection.
    Τι είναι αυτό που δεν καταλαβα καλά και κάνω λάθος όταν ζητάω με την foreach να μου δείξει όλα τα object info?. Αφού
    εχώ φτιάξει ένα Iterator. Έχω μια υποψία ότι κάτι δεν γίνεται καλά στην peopleCollection.Add(newPerson.Name, newPerson);
    αλλά δεν ξέρω γιατί μετά χτυπάει αν του δώσω την new keyword!!! σε κάθε αντικείμενο.

    Ευπρόσδεκτη κάθε υπόδειξη και σχόλιο.

    Ευχαριστώ.

  •  28-09-2008, 17:44 44945 σε απάντηση της 44943

    Απ: System.Collections

    To foreach σου χτυπάει γιατί μέσα στο collection δεν έχεις People objects. Η base class είναι DictionaryBase, η οποία αποτελείται από DictionatyEntry items. Θα πρέπει να λες δηλαδή:

    foreach (DictionayEnty de in peopleCollection)
    {
    Console.WriteLine("Name : {0}\nAge : {1}", de.Value.Name, de.Value.Age);
    }

    Πάντως, αν τα παραπάνω τα κάνεις για να έχεις string ως key στο Dictionary, τότε καλύτερα να χρησιμοποιήσεις ένα generic dictionary όπου αν απλά δηλώσεις

    Dictionary<string, person> openWith = new Dictionary<string, person>();

    έχεις ένα collection ακριβώς στα μέτρα σου.

     

     


    Vir prudens non contra ventum mingit
  •  28-09-2008, 18:38 44946 σε απάντηση της 44945

    Απ: System.Collections

    Ευχαριστώ KelMan,

    Τα Generics θα τα μελετήσω αυτές τις μέρες.
    Δεν είναι τόσο μόνο με το string key, κυρίως για να καταλάβω καλύτερα την χρήση
    των Collections : DictionaryBase, και όχι μόνο στα απλά CollectionBase με arrayLists etc.
    Άρα το GetEnumerator() δεν με εξυπηρετεί σε τίποτα στην συγκεκριμένη ενέργεια? Στο Program άν
    προσθέσω αυτό που μου προτείνεις δεν δουλεύει γιατί δεν βλέπει τα Values(Name, Age).
    Πρέπει να μπεί σαν  Iterator μέσα στην κλάση People?

  •  28-09-2008, 18:57 44947 σε απάντηση της 44946

    Απ: System.Collections

    Χμμ... άκυρο, αλλού είναι το πρόβλημα. Τώρα πρόσεξα ότι έκανες implement το GetEnumerator. Ε, το λάθος είναι ότι στο console app, θα πρέπει να πεις

    foreach (Person p in peopleCollection)

    και όχι

    foreach (People p in peopleCollection)

     

     


    Vir prudens non contra ventum mingit
  •  28-09-2008, 19:47 44948 σε απάντηση της 44947

    Απ: System.Collections

    Ωραία κι έτσι ξαναγυρνάμε στο αρχικό προβλημά μου, λάθος που δεν το ανέφερα.
    Στην foreach μου γυρνάει 3 ίδια objects, ότι έδωσα τελευταίο. Υποθέτω πως κάνω κάποιο
    λάθος όταν κάνω το peopleCollection.Add(), θέλει κάπου το new αλλά με χτυπάει όταν πάω
    να το προσθέσω.

  •  28-09-2008, 19:58 44949 σε απάντηση της 44943

    Απ: System.Collections

    Πρέπει να βάλεις το

    Person newPerson = new Person();

    μέσα στο

    for (int i = 1; i <= 3; i++)

    γιατί διαφορετικά φτιάχνεις το newPerson μόνο μια φορά και μετά αναφέρεσαι συνέχεια σε αυτό.


    Vir prudens non contra ventum mingit
  •  28-09-2008, 20:08 44950 σε απάντηση της 44949

    Απ: System.Collections

    Κοίτα να δείς....ρε παιδί μου...

    Σε ευχαριστώ πολύ Μάνο που ασχολήθηκες.

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