更新结构列表中的内容

时间:2010-12-05 19:53:34

标签: c# list forms struct replace

我有一个结构列表

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 个答案:

答案 0 :(得分:4)

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";

答案 1 :(得分:2)

你在这里使用Replace吗?为什么不直接分配新值?

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

此外,结构应该是不可变的类似值的类型。您的Student类型应该是一个类。

答案 2 :(得分:0)

由于字符串是不可变的,因此fName.Replace(tmpStudent.fName,“newName”)返回一个新字符串。这需要添加到结构