Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

244
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda