2010-04-30 10 views
6

he creado una clase con 3 campos:Lista de sobrescritura de datos en todas las posiciones

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; } 
     } 
    } 

Entonces declaró una lista de esa clase y un objeto de esa clase para que pueda ser capaz de añadir a la lista.

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

     Gente professor = new Gente(); 

La primera vez que hago el Alunos.Add (profesor); a la lista envía correctamente la información a la posición 0.

Pero cuando lo hago segunda vez que sobrescribe todo en la posición 0 con los nuevos datos, además de la adición de los nuevos datos a una nueva posición, 1.

Respuesta

13

¿Qué su código para agregar los dos objetos a la mirada lista ¿me gusta? Mi conjetura es:

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

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

Cuál es incorrecto. Cuando agrega tipos de referencia a una lista, solo está agregando una referencia al objeto original. En este caso, está agregando dos referencias al mismo objeto dos veces.

Por lo tanto, cuando modifica el segundo objeto ... también está modificando el primero.

Una solución simple de una sola línea sería para reiniciar professor antes de su segundo uso:

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

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

Usted debe agregar que la inserción de 'profesor = new Gente();' en la línea 4 corrige el problema. – Jens

+0

OK Gracias amigo. Funcionó. =) – elvispt

+0

¡Gracias hombre que salvó hoy! – Sam

Cuestiones relacionadas