2010-12-05 62 views
1

我有結構結構列表內更新內容

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

什麼是實現它的正確方法?

感謝

+4

可變的結構是不是一個好主意http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil – 2010-12-05 19:59:08

回答

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

Whay您使用Replace在這裏?爲什麼不直接分配新值?

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

此外,結構應該是不可變的值類型。你的Student類型應該是一個類。

0

由於字符串是不可變的,fName.Replace(tmpStudent.fName,「newName」)返回一個新的字符串。這需要被添加到結構,