Обновление содержимого в списке структур - PullRequest
1 голос
/ 05 декабря 2010

У меня есть список структур

List<Student> studentList = new List<Student>()

, и я хочу найти конкретного ученика, а затем обновить его информацию.Для этого у меня есть следующий код внутри метода

Student tmpStudent = new Student();
tmpStudent.fName = txtFName.Text;
studentList.Find(i => i.fName == tmpStudent.fName).fName.Replace(tmpStudent.fName, "newName");

, но проблема в том, что он не работает.Когда я показываю содержимое списка структур, у меня остается старая версия

string tmp = "";
foreach (Student s in studentList)
{
    tmp += s.fName + " " + s.lName + " " + s.Gpa.ToString() + "\n";
}
MessageBox.Show(tmp);

Как правильно ее достичь?

Спасибо

Ответы [ 3 ]

4 голосов
/ 05 декабря 2010

Replace не выполняет замену строки на месте - она ​​ возвращает новую строку с замененным текстом.

Вам необходимо присвоить возвращенную замененную строку обратно свойству fName.

var foundStudent = studentList.Find(i => i.fName == tmpStudent.fName);
foundStudent.fName = foundStudent.fName.Replace(foundStudent.fName, "newName");

Хотя вторая строка кажется слишком многословной (вам просто нужно присвоить новое имя):

var foundStudent = studentList.Find(i => i.fName == tmpStudent.fName);
foundStudent.fName = "newName";
2 голосов
/ 05 декабря 2010

Почему вы используете Replace здесь? Почему бы просто не присвоить новое значение напрямую?

Student s = studentList.Find(i => i.fName == txtFName.Text);
s.fName = "newName";

Кроме того, структуры должны быть неизменяемыми значениями типа. Ваш тип Student должен быть классом.

0 голосов
/ 05 декабря 2010

Поскольку строки неизменны, fName.Replace (tmpStudent.fName, "newName") возвращает новую строку. Это необходимо добавить в структуру,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...