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

απορία σε C#


acid18

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

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

 

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))

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

Συνδέστε για να σχολιάσετε
Κοινοποίηση σε άλλες σελίδες

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

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

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

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

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

Σύνδεση

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

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