我有一个结构列表
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);
实现它的正确方法是什么?
由于
答案 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”)返回一个新字符串。这需要添加到结构