acid18 Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Αν έχουμε μια κλάση πχ class test { public string name; public test(string name_) { this.name = name_; } } και έχουμε κάποιο αντικείμενο temp αυτό εδώ temp.name = "kapia timi" δημιουργεί null reference exception γιατί γίνεται αυτό?
albNik Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Πρέπει να έχεις δημιουργήσει πρώτα το temp με new test temp = new test("timi"); temp.name="alli timi";
acid18 Δημοσ. 16 Μαρτίου 2013 Μέλος Δημοσ. 16 Μαρτίου 2013 ναι το ξέρω αυτό εννοείται, έχει καμιά σημασία που η ανάθεση γίνεται σε while loop? αυτός είναι ο κώδικας student temp = new student(); List<student> students = new List<student>(); string sql = "select * from student"; SqlCeConnection con = new SqlCeConnection(@"DataSource=MyDatabase#1.sdf"); con.Open(); SqlCeCommand cmd = new SqlCeCommand(sql, con); SqlCeDataReader reader = cmd.ExecuteReader(); int i = 0; while (reader.Read()) { // ΑΥΤΟ ΛΕΙΤΟΥΡΓΕΙ student temp = new student(reader["fname"].ToString(), reader["lname"].ToString(), reader["bdate"].ToString()); temp.fname = reader["fname"].ToString(); //temp.lname = reader["lname"].ToString(); // temp.bdate = reader["bdate"].ToString(); students.Add(temp); temp = null; i++; } // MessageBox.Show(students.ElementAt(0).fname); // MessageBox.Show(students.ElementAt(0).lname); con.Close(); return students; } } }
albNik Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Βγάλε temp=null απο το loop. Μετά το πρώτο loop είναι πλέον null. Επίσης πρέπει να δημιουργείς νέο temp κάθε φορά στη while, αλλιώς όλα τα στοιχεία της λίστας έχουν (αναφορά στο) το ίδιο αντικείμενο. Αυτό που προστέθηκε τελευταίο.
παπι Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 1) Δες properties 2) Εφοσον εχεις constructor που παιρνει τα στοιχεια τοτε μπορεις απλα να κανεις students.Add(new Student("name", etc))
acid18 Δημοσ. 16 Μαρτίου 2013 Μέλος Δημοσ. 16 Μαρτίου 2013 1) Δες properties 2) Εφοσον εχεις constructor που παιρνει τα στοιχεια τοτε μπορεις απλα να κανεις students.Add(new Student("name", etc)) στο 2 εννοείς να το κάνω έτσι students.Add(new student(reader["fname"].ToString(), reader["lname"].ToString(), reader["bdate"].ToString())?
acid18 Δημοσ. 16 Μαρτίου 2013 Μέλος Δημοσ. 16 Μαρτίου 2013 Πριν το είχα κάνει με αυτόν τρόπο επειδή δεν λειτουργούσε ο τρόπος που έχω τώρα. Η αλήθεια είναι ότι τώρα διαβάζω για την c# (γενικά .net) και προσπαθώ να κάνω διάφορα και linq δεν είδα ακόμα.. Το βιβλίο είναι Visual C# 2008 Βήμα βήμα.
παπι Δημοσ. 16 Μαρτίου 2013 Δημοσ. 16 Μαρτίου 2013 Χαλαρα, ειναι ευκολη γλωσσα και κυριως διασκεδαστικη. Καλη συνεχεια
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα