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 .