Visual CSharp .NET - Elementos de una lista

 
Vista:

Elementos de una lista

Publicado por Dalsom (13 intervenciones) el 24/11/2020 16:35:27
Buenos dias. Agradeciendo de antemano la ayuda brindada.

Tengo una lista de una columna cuya clase seria algo asi

public class ListaUnaColumna{ public string Columna {get;set;}}

e intento llenarla con un foreach asi :

1
2
3
4
5
6
7
8
List<ListaUnaColumna> Lista = new List<ListaUnaColumna>();
ListaUnaColumna linea = new ListaUnaColumna();
// 5 registros
var origen = (from t in ApplicationDbContext.Origen where t.flag == true select new{ t.Descripcion}).ToList();
foreach(var r in origen){
   linea.Columna = r.Descripcion.Trim().ToUpper();
   Lista.Add(linea);
}


El problema sucede al agregar a la lista la nueva linea, pues al agregar el nuevo valor, los demas indices cambian al ultimo valor asignado. Que estoy haciendo mal en mi logica?
Pues creo que en esta forma, estoy llenando la Lista correctamente, pero siempre se actualizan todos los elementos al ultimo elemento agregado.

Perdonen si intento hacer algo que no es correcto, aun estoy intentando aprender error tras error.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Eureka!! Elementos de una lista

Publicado por Dalsom (13 intervenciones) el 28/11/2020 02:51:29
Al fin he logrado dar con la solucion.

Lo que sucede es que al no instanciar nuevamente el objeto que agrego a la lista, cada elemento agregado a la lista funciona como un espejo de este objeto que se agrega, y al cambiar el valor del objeto que agregare a la lista, automaticamente cambiaran al mismo valor asignado todos los elementos de la lista, ya que son el mismo objeto.

Teniendo esto en cuenta, lo que se debe hacer es instanciar de nuevo el objeto que agrego con la palabra reservada new, para que asi no forme el efecto espejo que me cambia los valores.

Poniendolo en codigo seria algo asi :

1
2
3
4
5
6
7
8
9
List<ListaUnaColumna> Lista = new List<ListaUnaColumna>();
ListaUnaColumna linea = new ListaUnaColumna();
// 5 registros
var origen = (from t in ApplicationDbContext.Origen where t.flag == true select new{ t.Descripcion}).ToList();
foreach(var r in origen){
  linea = new ListaUnaColumna(); // Eureka! : Esta linea evita el efecto espejo.
  linea.Columna = r.Descripcion.Trim().ToUpper();
  Lista.Add(linea);
}

Perdonen si les he dado muchos problemas de principiantes, no tengo mejor forma de aprender mas que de los errores!
Gracias a todos por leer mis entradas al foro. Y muchas mas por contestarme o guiarme a una solucion.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar