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

 

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

nullreference exception σε dynamic array

Îåêßíçóå áðü ôï ìÝëïò mclisme. Τελευταία δημοσίευση από το μέλος mclisme στις 19-11-2008, 17:26. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-11-2008, 02:41 46285

    nullreference exception σε dynamic array

    Πρεπει να ειμαι ειτε πολύ κουρασμενος ειτε πολυ στραβός. Εκτος αυτων ομως ειμαι και πολύ εκνευρισμενος!Super Angry γιατι εχω χασει 4 ωρες ψαχνοντας τη συγκεκριμενη  null-reference

    totitems = ListBox1.SelectedItems.Count
    Dim ndadd() As TreeNode = New TreeNode() {}
    ReDim ndadd(totitems - 1)
    For k = 0 To ListBox1.SelectedItems.Count - 1
    ndadd(k).Text = ListBox1.SelectedItems.Item(k)
    Next k

    *** η μεταβλητη totitems εχει δηλωθει, απλα το ξεχασα στο copy
    εχω dynamic array κ μαλιστα τυπου treenode. Που υπαρχει προβλημα στη δηλωση κ αρχικοποιηση του αφου η συνταξη ειναι σωστη και εμπεριεχει και  ( ) αλλα και { } ??? Μηπως μου κανει το προβλημα το redim?? πως αλλιως ομως θα δινω μεταβλητο μεγεθος καθε φορα???


  •  18-11-2008, 12:10 46294 σε απάντηση της 46285

    Απ: nullreference exception σε dynamic array

    Το πρόβλημα είναι ότι ΔΕΝ έχεις δημιουργήσει κανένα αντικείμενο TreeNode. Οι Dim/Redim που χρησιμοποιείς δημιουργούν ένα πίνακα από TreeNodes, δεν δημιουργούν και τα αντικείμενα που θα μπουν μέσα στον πίνακα. Τα αντικείμενα αυτά θα πρέπει να τα δημιουργήσεις με κάποιο New μέσα στο For loop.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  18-11-2008, 14:08 46299 σε απάντηση της 46294

    Απ: nullreference exception σε dynamic array

    Μάλιστα. Καταλαβα τι εννοεις κ ειναι αληθεια οτι δεν το γνωριζα. Πιστευα δηλαδη οτι άπαξ κ δηλωσα τον πινακα πληρως, τον τυπο του κ τα ορια του (εστω δυναμικα), μπορω να αναφερθω σε οποιοδηποτε στοιχειο του κατευθειαν.  Βασιζομενος λοιπον στην υποδειξη σου εψαξα στο MSDN για arrays of objects και προσθεσα την παρακατω εντολη αμέσως μετά την εναρξη του   FOR....

    ndadd(k) = New TreeNode()

    οπου και δουλεψε μια χαρα.

    Ερωτηση 1: η απαιτηση να δημιουργουμε καθε ενα στοιχειο του πινακα πριν το χρησιμοποιησουμε εμφανιζεται ανεξαρτητως τυπου του πινακα? Δηλαδη ακομα και σε ενα πινακα τυπου integer ή string χρειαζεται μετα την δηλωση του πινακα, και η αρχικοποιηση καθε ενος στοιχειου με την New ή αυτό συμβαίνει μονο στις περιπτωσεις που ο πινακας περιεχει στοιχεια τύπου object, όπως πχ. treenode, textbox, κτλ.?

    Ερωτηση 2: η εντολη που χρησιμοποιησα <<< ndadd(k) = New TreeNode() >>> επειδη την εγραψα δοκιμαζοντας και οχι απο επιβεβαιωμενη γνωση, τι άλλες παραμετρους θα μπορουσε να εχει που αγνοώ, ή είναι πλήρως ορισμένη? εννοω μηπως μπορουν να μπουν και  αγκύλες τύπου { } ? ή κατι άλλο που σε άλλη στιγμή μπορεί να χρειαστεί?
  •  18-11-2008, 21:08 46314 σε απάντηση της 46299

    Απ: nullreference exception σε dynamic array

    Κάνεις μπαμ από μακρυά ότι είσαι άρτι αφιχθείς από τον κόσμο της vb6! Ωραία!
    1) Όχι, δεν χρειάζεται να αρχικοποιήσεις τις τιμές όταν πρόκειται για string, integer κλπ. Αυτού του είδους οι τύποι στο .net λέγονται value types. Άλλοι τύποι π.χ. treenode, textbox λέγονται reference types και όχι τύπου object, γιατί στο .net και όλα τα types, ακόμα και τα string, integer κλπ κληρονομούν το System.Object.
    2) Μια χαρά είναι. Αγκύλες θα βάλεις μόνο αν θέλεις στην ίδια "γραμμή" με την αρχικοποιήση να ορίσεις και μερικές αρχικές τιμές στο TreeNode (μμμ υποστηρίζεται αυτό στην vb ή μόνο στην c#;).
    Γενικά η Redim είναι λίγο ξεπερασμένη και υπάρχει για λόγους συμβατότητας. Θα πρότεινα να χρησιμοποιήσεις άλλα data structures όπως τα List, IList, ArrayList, HashTable.


    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  19-11-2008, 12:37 46333 σε απάντηση της 46314

    Απ: nullreference exception σε dynamic array

    Αυτο που γραφεις ειναι μια μεγαλη αληθεια!!! Χρησιμοποιουσα για χρονια την VB6 και τωρα προσπαθω να γραψω το πρωτο μεγαλο μου προγραμμα στην .net. Διαβαζοντας βιβλία, φορουμς, ιστοσελιδες κτλ. εχω διαπιστωσει οτι οι δυνατοτητες ειναι απεριοριστες, αλλα πλεον εχει αλλάξει σε ενα τεραστιο βαθμο και η φιλοσοφια και η λογικη της δομης της γλώσσας. Καποιος που την μαθαινει πρεπει να δεχτει οτι ειναι περισσοτερο μια εντελως νεα γλώσσα, παρα μια συνεχεια της VB6. Ετσι θα ειναι περισσοτερο δεκτικος σε οτι αλλαγες βλεπει οτι εχουν συντελεστει σε παλιες, απλες διαδιακασιες.
  •  19-11-2008, 12:54 46334 σε απάντηση της 46333

    Απ: nullreference exception σε dynamic array

    mclisme:
    Καποιος που την μαθαινει πρεπει να δεχτει οτι ειναι περισσοτερο μια εντελως νεα γλώσσα, παρα μια συνεχεια της VB6. Ετσι θα ειναι περισσοτερο δεκτικος σε οτι αλλαγες βλεπει οτι εχουν συντελεστει σε παλιες, απλες διαδιακασιες.

    Έτσι ακριβώς είναι. Για να το παραφράσω λίγο, δεν είναι μια νέα γλώσσα αλλά ένα νέο framework. Ίσως όσο εύκολο είναι να περάσει ο vb6 developer στην vb.net είναι και για τον c++ developer να περάσει στην c#.
    ps. Κάνε μια προσπάθεια να βάζεις τόνους. Θα μας κάνει παράπονα η μηχανή αναζήτησης του site! :)

    Dimitris Papadimitriou
    Software Development Professional
    dotNETZone.gr News

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Διαβάστε επίσης τους όρους χρήσης.
  •  19-11-2008, 17:26 46345 σε απάντηση της 46334

    Απ: nullreference exception σε dynamic array

    Ζητώ συγγνώμη! Στο μέλλον θα επιδείξω σαφώς καλύτερη συμπεριφορά στην συγγραφή μηνυμάτων!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems