Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Αν έχουμε μια κλάση πχ

 

class test

         {

                 public string name;

                 

                  public test(string name_)

                                  {

                                        this.name = name_;

                                   }

            }

 

 

και έχουμε κάποιο αντικείμενο temp

 

αυτό εδώ temp.name = "kapia timi" δημιουργεί  null reference exception

γιατί γίνεται αυτό?

Δημοσ.

ναι το ξέρω αυτό εννοείται, έχει καμιά σημασία που η ανάθεση γίνεται σε 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;
       }
    }
}
Δημοσ.

Βγάλε temp=null απο το loop. Μετά το πρώτο loop είναι πλέον null. 

Επίσης πρέπει να δημιουργείς νέο temp κάθε φορά στη while, αλλιώς όλα τα στοιχεία της λίστας έχουν (αναφορά στο) το ίδιο αντικείμενο. Αυτό που προστέθηκε τελευταίο.

Δημοσ.

1) Δες properties

2) Εφοσον εχεις constructor που παιρνει τα στοιχεια τοτε μπορεις απλα να κανεις students.Add(new Student("name", etc))

Δημοσ.

1) Δες properties

2) Εφοσον εχεις constructor που παιρνει τα στοιχεια τοτε μπορεις απλα να κανεις students.Add(new Student("name", etc))

στο 2  εννοείς να το κάνω έτσι students.Add(new student(reader["fname"].ToString(), reader["lname"].ToString(), reader["bdate"].ToString())?

Δημοσ.

Πριν το είχα κάνει με αυτόν τρόπο επειδή δεν λειτουργούσε ο τρόπος που έχω τώρα.

Η αλήθεια είναι ότι τώρα διαβάζω για την c# (γενικά .net) και προσπαθώ να κάνω διάφορα και linq δεν είδα ακόμα..

Το βιβλίο είναι Visual C# 2008 Βήμα βήμα.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...