Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

245
Vistas
El método C# List.Clear() no obtiene la respuesta correcta

Estoy tratando de asignar la siguiente clase a una clase de destino usando el siguiente código. Aquí tratando de asignar la clase de empleado a

 static void Main(string[] args) { var emp = new List<Employee>() { new Employee() { FirstName = "Test", LastName = "Performance", ID="1", Availabities = new List<Availability>() { new Availability() { BeginDate = DateTime.Now, EndDate = DateTime.Now.AddDays(1) } } }, new Employee() { FirstName = "Test1", LastName = "Performance1", ID="2", Availabities = new List<Availability>() { new Availability() { BeginDate = DateTime.Now, EndDate = DateTime.Now.AddDays(10) } } }, new Employee() { FirstName = "Test123", LastName = "Performance1", ID="3", Availabities = new List<Availability>() { new Availability() { BeginDate = DateTime.Now, EndDate = DateTime.Now.AddDays(5) }, new Availability() { BeginDate = DateTime.Now, EndDate = DateTime.Now.AddDays(3) } } } };

Aquí está la asignación de objetos de destino, aquí el empleado que se asignará con EmployeeDest.

 List<AvailabilityDest> empAvailabilitiesDest = new List<AvailabilityDest>(); var results = new List<EmployeeDest>(); foreach (var token in emp) { empAvailabilitiesDest.Clear(); foreach (var item in token.Availabities) { var empAvailability = new AvailabilityDest { BeginDateDest = item.BeginDate, EndDateDest = item.EndDate, }; empAvailabilitiesDest.Add(empAvailability); } var employee = new EmployeeDest { FirstNameDest = token.FirstName, LastNameDest = token.LastName, IDDest =token.ID, AvailabitiesDest = empAvailabilitiesDest }; results.Add(employee); } Console.WriteLine(results); }

Aquí empAvailabilitiesDest.Clear() no borra la lista y availabilityDest aumenta con cada iteración.

Yo me estoy perdiendo algo aqui .

  1. ¿Cómo puedo optimizar el código aquí para obtener un mejor rendimiento?
over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Presumiblemente, el problema real aquí es que todos sus objetos de empleados comparten la misma lista; no importa si lo borra, agrega cosas, etc.: si hay una lista y se comparte entre todos los empleados, los cambios en esa lista se mostrarán en todos los empleados y aparecerán incorrectos.

Presumiblemente, solo desea mover la creación de la lista dentro del foreach por empleado:

 var results = new List<EmployeeDest>(); foreach (var token in emp) { List<AvailabilityDest> empAvailabilitiesDest = new List<AvailabilityDest> (); // your previous code unchanged }
over 4 years ago · Santiago Trujillo Denunciar

0

1. Problema en tu código

 var employee = new EmployeeDest { FirstNameDest = token.FirstName, LastNameDest = token.LastName, IDDest = token.ID, AvailabitiesDest = empAvailabilitiesDest // This is problematic code };

Debido al código anterior, cada empleado.AvailabitiesDest hará referencia al mismo objeto porque no es una variable de tipo primitivo. Debe asignar una copia del objeto a employee.AvailabitiesDest,

 var employee = new EmployeeDest { FirstNameDest = token.FirstName, LastNameDest = token.LastName, IDDest = token.ID, AvailabitiesDest = new List<AvailabilityDest>(empAvailabilitiesDest) };

2. Código simplificado

Usa Linq.

 results = emp.Select(token => new EmployeeDest { FirstNameDest = token.FirstName, LastNameDest = token.LastName, IDDest = token.ID, AvailabitiesDest = token.Availabities.Select(item => new AvailabilityDest { BeginDateDest = item.BeginDate, EndDateDest = item.EndDate, }).ToList() }).ToList();

O use AutoMapper

 var mapper = new Mapper(new MapperConfiguration(cfg => { cfg.CreateMap<Employee, EmployeeDest>() .ForMember(x => x.FirstNameDest, opt => opt.MapFrom(src => src.FirstName)) .ForMember(x => x.LastNameDest, opt => opt.MapFrom(src => src.LastName)) .ForMember(x => x.IDDest, opt => opt.MapFrom(src => src.ID)) .ForMember(x=> x.AvailabitiesDest, opt => opt.MapFrom(src => src.Availabities)); cfg.CreateMap<Availability, AvailabilityDest>() .ForMember(x => x.BeginDateDest, opt => opt.MapFrom(src => src.BeginDate)) .ForMember(x => x.EndDateDest, opt => opt.MapFrom(src => src.EndDate)); })); var results = mapper.Map<List<EmployeeDest>>(emp);
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda