Principales respuestas
Objetos en listas

Pregunta
-
Hola que tal, soy nuevo en esto de la programacion y me puse a practicar con listas y objetos pero me sale un output no deseado y me esta taladrando la cabeza jajaja, aca va el codigo que tengo armado:
class Empleados { static string nombre; static int edad; public Empleados(string nombre1,int edad1) { nombre = nombre1; edad = edad1; } public static string getNombre() { return nombre; } public static int getEdad() { return edad; } }
class ListaEmpleados { public static List<Empleados> empleados = new List <Empleados>(); int contador; public void NuevoEmpleado(string nombre, int edad) { Empleados empleado = new Empleados(nombre, edad); empleados.Insert(contador, empleado); contador++; } }
class Program { static void Main(string[] args) { ListaEmpleados lista = new ListaEmpleados(); lista.NuevoEmpleado("daniel", 32); lista.NuevoEmpleado("diego", 50); lista.NuevoEmpleado("sergio", 40); foreach (Empleados i in ListaEmpleados.empleados) { Console.WriteLine($"El nombre es: {Empleados.getNombre()} y la edad es: {Empleados.getEdad()}"); } } }
Y este es el output que recibo:
El nombre es: sergio y la edad es: 40
El nombre es: sergio y la edad es: 40
El nombre es: sergio y la edad es: 40
Presione una tecla para continuar . . .Porque sucede esto? porque la variable nombre y edad toman los ultimos datos que les paso unicamente y no se almacenan?
Hay algo que me falta o que es lo que esta mal en el codigo?
Desde ya muchas gracias
- Editado Pikuuuu viernes, 18 de septiembre de 2020 5:20
Respuestas
-
No, el error está en el bucle:
foreach (Empleados i in ...)
fíjate que la variable "i" es la que itera sobre la lista. Pero después, dentro del bucle, no usas para nada la i, sino que escribes el resultado de llamar a sendos métodos estáticos de la clase Empleados. Al ser estáticos conservan el último valor, que se imprime en todas las iteraciones del bucle.
El remedio inmediato sería usar la i dentro del bucle, pero además de eso es necesario que quites los "static" en la clase Empleados y dejes todo como variables de instancia. Mientras sean static, solo es posible almacenar un único empleado.
- Propuesto como respuesta Andres Aguilar MModerator viernes, 18 de septiembre de 2020 14:47
- Marcado como respuesta Pikuuuu viernes, 18 de septiembre de 2020 15:20
Todas las respuestas
-
No, el error está en el bucle:
foreach (Empleados i in ...)
fíjate que la variable "i" es la que itera sobre la lista. Pero después, dentro del bucle, no usas para nada la i, sino que escribes el resultado de llamar a sendos métodos estáticos de la clase Empleados. Al ser estáticos conservan el último valor, que se imprime en todas las iteraciones del bucle.
El remedio inmediato sería usar la i dentro del bucle, pero además de eso es necesario que quites los "static" en la clase Empleados y dejes todo como variables de instancia. Mientras sean static, solo es posible almacenar un único empleado.
- Propuesto como respuesta Andres Aguilar MModerator viernes, 18 de septiembre de 2020 14:47
- Marcado como respuesta Pikuuuu viernes, 18 de septiembre de 2020 15:20
-
Hola Pikuuuu,
¿Alguna novedad sobre la consulta realizada? ¿Han sido útiles las respuestas proporcionadas?
Espero su respuesta.
Gracias por usar los foros de MSDN.
Andres Aguilar
____________________________
Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.
Si tiene algún cumplido o reclamo sobre el soporte de MSDN sientase en la libertad de contactar MSDNFSF@microsoft.com.
-
Hola Pikuuuu,
Gracias por confirmar que se ha encontrado una solución a la consulta realizada. Debido a ello, este hilo será cerrado.
Si es necesario, por favor abra un nuevo hilo.
Gracias por usar los foros de MSDN.
Andres Aguilar
____________________________