Ответ 1
Вы не можете изменить переменную итерации цикла foreach, но вы можете изменить членов переменной итерации. Поэтому измените метод ChangeName
на
private void ChangeName(StudentDTO studentDTO)
{
studentDTO.name = SomeName;
}
Обратите внимание, что studentDTO
является ссылочным типом. Поэтому нет необходимости возвращать измененного ученика. То, что получает метод ChangeName
, не является копией ученика, а ссылкой на уникальный объект-ученик. Итерационная переменная и studentDTOList
ссылаются на один и тот же объект-ученик, что и параметр studentDTO
метода.
И измените цикл на
foreach(StudentDTO student in studentDTOList)
{
ChangeName(student);
}
Однако методы, подобные ChangeName
, необычны. Способ заключается в инкапсуляции поля в свойство
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
Затем вы можете изменить цикл на
foreach(StudentDTO student in studentDTOList)
{
student.Name = SomeName;
}
ИЗМЕНИТЬ
В комментарии вы говорите, что вам нужно изменить много полей. В этом случае было бы хорошо иметь метод UpdateStudent
, который будет делать все изменения; однако я все равно сохранил бы свойства.
Если в свойствах нет дополнительной логики, кроме передачи значения, вы можете заменить их удобными автоматически реализованными свойствами.
public string Name { get; set; }
В этом случае вам придется отбросить поле name
.