2010-04-30 7 views
6

ich eine Klasse mit 3 Feldern erstellt:Liste Überschreiben von Daten auf allen Positionen

class Gente 
    { 
     int _ID; 
     string _nome, _sexo; 


     public Gente() 
     { 
      _ID = 0; 
      _nome = ""; 
      _sexo = ""; 
     } 

     public int ID 
     { 
      set { _ID = value; } 
      get { return _ID; } 
     } 

     public string Nome 
     { 
      set { _nome = value; } 
      get { return _nome; } 
     } 

     public string Sexo 
     { 
      set { _sexo = value; } 
      get { return _sexo; } 
     } 
    } 

Dann erklärte ich eine Liste von dieser Klasse und ein Objekt von dieser Klasse, so dass ich in der Lage sein kann, um die Liste hinzuzufügen.

List<Gente> Alunos = new List<Gente>();   

     Gente professor = new Gente(); 

Das erste Mal mache ich die Alunos.Add (Professor); Zu der Liste sendet es die Information korrekt an die 0-Position.

Aber wenn ich es zweites Mal tun überschreibt er alles auf Position 0 mit den neuen Daten neben Hinzufügen der neuen Daten in eine neue Position, 1.

Antwort

13

Was macht Ihr Code die beiden Objekte auf der Liste Look hinzufügen mögen? Meine Schätzung ist:

Gente professor = new Gente(); 
professor.Nome = "Fu"; 
Alunos.Add(professor); 

professor.Nome = "Bar"; 
Alunos.Add(professor); 

Das ist falsch. Wenn Sie einer Liste Referenztypen hinzufügen, fügen Sie nur einen Verweis auf das ursprüngliche Objekt hinzu. In diesem Fall fügen Sie zweimal demselben Objekt zwei Referenzen hinzu.

Wenn Sie also das zweite Objekt ändern, ändern Sie auch die erste.

Eine einfache Einzeiler fix wäre professor vor seinem zweiten Einsatz neu initialisiert werden:

Gente professor = new Gente(); 
professor.Nome = "Fu"; 
Alunos.Add(professor); 

professor = new Gente(); 
professor.Nome = "Bar"; 
Alunos.Add(professor); 
+3

Sie fügen sollte, dass das Einfügen 'Professor = new Gente();' in Zeile 4 das Problem behebt. – Jens

+0

OK Danke Kumpel. Es funktionierte. =) – elvispt

+0

Danke mann du hast may day !!!!! – Sam

Verwandte Themen