2016-06-30 9 views
0

ich eine Liste von Students wie haben unterC#/VB - ändern Sie den Wert einer Eigenschaft einer Klasse (Objekt)

public List<Students> StudentsClassCollection; 

Students Klasse sieht aus wie folgt:

public class Students 
{ 
    public string StudentName; 
    public bool Passed; 
} 

Ich möchte Greifen Sie auf einen der Schüler zu und ändern Sie den Wert Passed von false in true. Wie kann ich das tun?

+0

Ist _StudentName_ ein eindeutiger Wert zwischen Ihren Schülern? Wenn nicht, wie wollen Sie eine Gruppe von Schülern mit dem gleichen Namen korrekt identifizieren? – Steve

+0

Wenn Sie sagen, Schüler Klasse jeder, der in diesem Code entwickeln wird denken, dass diese Klasse Liste der Schüler haben. falscher Name, ich postete Antwort –

Antwort

3

Verwenden Linq to Identifizieren Sie den Schüler anhand seines Namens und legen Sie die Eigenschaft auf "Wahr" fest. Nur einen Namen zu verwenden, ist eine schreckliche Art, einen Datensatz zu finden, da Sie eine exakte Übereinstimmung benötigen (einschließlich Groß- und Kleinschreibung). Fügen Sie einen Primärschlüssel hinzu oder teilen Sie den Namen zuerst und zuletzt auf und fügen Sie ein Geburtsdatum hinzu.

public void UpdateStudentToPassed(string studentName) 
    { 
     StudentsClassCollection.Single(obj => obj.StudentName == studentName).Passed = true; 
    } 
2
var foundStudent = StudentsClassCollection.First(s => s.StudentName == "LookingForYou"); 
foundStudent.Passed = true; 
+0

Natürlich, wenn es keinen Studenten mit diesem Namen gibt, wird dies spektakulär zusammenbrechen – Steve

+0

@Steve gab es ein paar Annahmen gemacht. Wenn ich über meine Daten sicher bin, verwende ich First, muss nicht zweifelhaft sein und FirstOrDefault verwenden. – Yahya

1

Wenn Sie wissen, welche Schüler, durch den Index, es ist so einfach wie:

StudentsClassCollection[i].Passed = true

Wenn Sie sich für den Schüler mit Namen suchen, vielleicht:

var student = StudentsClassCollection.FirstOrDefault(s => s.name == "Bob"); 
if (student != null) { 
student.Passed = true 
} 

für den Schüler "Bob"

+0

Wenn es sonst nur einen "Bob" gibt? – Steve

+0

Wenn es mehrere Schüler mit demselben Namen gibt, hat das System größere Probleme - wie kann man sagen, welcher Schüler tatsächlich bestanden hat? Wenn es ein gültiges Verhalten ist, das alle Schüler, die "Bob" genannt werden, bestehen, könnten Sie: 'foreach (var Schüler in StudentsClassCollection.Where (s => s.name ==" Bob ") { student.passed = true; } ' – daf

0

Einer der meisten impo Zelt Dinge in OOP ist die Basis Sachen Klasse tun sollten Schüler und Studenten nicht aufgerufen werden (Sie es in Ihrem Fall sehen, dass, wenn Sie es wollen Studenten Sie Liste der Schüler zu tun sein)

public List<Student> StudentsClassCollection = new List<Students>(); 
    StudentsClassCollection.Add(new Student("Ben","true")) 

    public class Student 
    { 
     public string StudentName {get; set;} 
     public bool Passed { get; set;} 

     public Student(string name,Bool pass) 
     { 
      this.StudentName = name; 
      this.Passed = pass; 
     } 
    } 

    foreach(Student s in StudentsClassCollection) 
    { 
     if(s.StudentName.Equals("what you looking for")) 
      s.Passed = true; 
    } 
Verwandte Themen