Saltar al contenido

¿Cambiar el valor de los objetos en el bucle foreach?

María, miembro de este equipo de trabajo, nos hizo el favor de redactar esta crónica porque controla muy bien dicho tema.

Solución:

No puede cambiar la variable de iteración de un bucle foreach, pero puede cambiar los miembros de la variable de iteración. Por lo tanto cambia el ChangeName método para

private void ChangeName(StudentDTO studentDTO)

    studentDTO.name = SomeName;

Tenga en cuenta que studentDTO es un tipo de referencia. Por lo tanto, no hay necesidad de devolver al estudiante cambiado. Que ChangeName obtiene el método, no es una copia del estudiante sino una referencia al objeto estudiante único. La variable de iteración y la studentDTOList ambos hacen referencia al mismo objeto de estudiante al igual que el studentDTO parámetro del método.

Y cambiar el bucle a

foreach(StudentDTO student in studentDTOList)

    ChangeName(student);

Sin embargo, métodos como ChangeName son inusuales El camino a seguir es encapsular el campo en una propiedad

private string name;
public string Name

    get  return name; 
    set  name = value; 

A continuación, puede cambiar el bucle a

foreach(StudentDTO student in studentDTOList)

    student.Name = SomeName;


EDITAR

En un comentario dices que tienes que cambiar muchos campos. En ese caso, estaría bien tener un método UpdateStudent eso haría todos los cambios; sin embargo, todavía mantendría las propiedades.

Si no hay una lógica adicional en las propiedades además de pasar un valor, puede reemplazarlas por las prácticas propiedades implementadas automáticamente.

public string Name  get; set; 

En ese caso tendrías que soltar el campo name.

De todos modos, no está cambiando el objeto al que se refiere, por lo que puede usar:

foreach (StudentDTO student in studentDTOList)

    student.name = SomeName;

O todavía llamar a un método:

foreach (StudentDTO student in studentDTOList)

    ChangeStudent(student);

En ambos casos, el código no cambia el valor de la variable de iteración (student) así que está bien.

Pero su ejemplo original no se compila de todos modos: una variable de iteración introducida por un foreach el bucle es de solo lectura.

Recuerda algo, que tienes la opción de reseñar .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *