2010-12-05 46 views
1

J'ai une liste de structcontenu à l'intérieur d'une liste de struct

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

et je veux trouver un étudiant spécifique, puis mettre à jour ses informations. Pour ce faire, j'ai le code suivant à l'intérieur d'une méthode

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

mais le problème nous que cela ne semble pas fonctionner. Quand je montre le contenu de la liste des struct J'ai encore l'ancienne version

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

Quelle est la bonne façon d'y parvenir?

Merci

+4

structures Mutable n'est pas une bonne idée http://stackoverflow.com/questions/441309/why-are-mutable-structs-evil –

+3

Étudiant semble que ce devrait être une 'classe ', pas un' struct'; il est ** incroyablement ** rare de créer un 'struct' en C# –

Répondre

4

Replace ne fait pas « en place » le remplacement d'une chaîne - il retours une nouvelle chaîne avec le texte remplacé.

Vous devez affecter la chaîne remplacée renvoyée à la propriété fName.

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

Bien que la deuxième ligne semble être (vous devez simplement attribuer le nouveau nom) trop bavard:

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

Whay utilisez-vous Replace ici? Pourquoi ne pas attribuer directement la nouvelle valeur?

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

De plus, les structures devraient être des types de valeurs immuables. Votre type Student doit être une classe.

0

Étant donné que les chaînes sont immutables fName.Replace (tmpStudent.fName, "newName") renvoie une nouvelle chaîne. Cela doit être ajouté à la structure,