Ich habe eine Klasse namens Student, es enthält einen Namen und ein paar Noten, die nicht zu viel für dieses Problem sind. Wie würde ich einen einzelnen Schüler nach seinem Namen aus einem List-Objekt auswählen?Wie bekomme ich ein Objekt aus einer Liste einer benutzerdefinierten Klasse?
Antwort
students.FirstOrDefault(s => s.Name == studentName);
So Studenten ist die Liste, Studentname ist eine Zeichenfolge, aber was ist s? – dvs
bitte google 'Lambda-Ausdruck' und' linq query' –
List<Student> listOfStudents = new List<Student>();
// ...
// put some data to listOfStudents
// ...
var searchName = "MyName";
var singleStudent = listOfStudents.Single(s => s.name == searchName);
// or SingleOrDefault(s=>s.name == searchName)
StudentList
Lassen Sie eine Liste von students
(Student-Objekte) sein, dass Sie durch Ihre Codes beibehalten wird. Bedenken Sie, dass Sie den ersten Schüler anhand seines Namens auswählen möchten. dann können Sie die Liste .FirstOrDefault verwenden, die Ihnen das ersten passenden Studenten Objekt gibt, das eine bestimmte Bedingung erfüllt: wenn Sie alle Schüler, die holen müssen Name gleich den Suchtext sein wird, können das Sie Liste .Where()
List<student> StudentList = new List<student>();
//TODO: Populate the List here
string searchName = "luckey";
student FirstStudent = StudentList
.FirstOrDefault(x => String.Equals(searchName,
x.Name,
StringComparison.CurrentCultureIgnoreCase));
// first student whose name is luckey
List<student> searchResult = StudentList
.Where(x => String.Equals(searchName,
x.Name,
StringComparison.CurrentCultureIgnoreCase))
.ToList();
//sub list of students whose name is luckey
Es gibt viele Möglichkeiten, dies zu tun. Einfachste wäre eine Schleife verwenden wie:
List<Student> list = new List<Student>();
Student matchedStudent = null;
string inputStudentName = "SomeName";
foreach (var student in list)
{
if (String.Equals(inputStudentName, student.Name, StringComparison.CurrentCultureIgnoreCase))
{
matchedStudent = student;
break;
}
}
if (matchedStudent != null)
{
//student found
}
Sie auch LINQ und FirstOrDefault
wie verwenden:
matchedStudent = list.FirstOrDefault(s => String.Equals(inputStudentName, s.Name, StringComparison.CurrentCultureIgnoreCase));
Es gibt andere Methoden LINQ ein einzelnes Objekt zu bekommen, wie Single
, SingleOrDefault
usw.
Wenn Sie eine Sammlung aller Schüler erhalten möchten, die Ihren Kriterien entsprechen, dann können Sie Folgendes tun:
Es wäre besser, mit Schleifen zu beginnen und dann mehr über LINQ zu lesen, Sie wären in der Lage, mit LINQ einen kürzeren und eleganten Code zu schreiben.
Einfachste ist der beste Weg vorwärts für die op in diesem Fall, der oben genannte ist perfekt :) –
Wenn Sie LINQ lernen möchten, können Sie hier beginnen: Basic LINQ Query Operations.
var student = students.FirstOrDefault(s => s.Name == searchName);
Dieser Ausdruck ist ein "Lambda-Ausdruck":
s => s.Name == searchName
Es ist eine anonyme Funktion. Es wird für jedes Element in der Liste aufgerufen. Um es ein wenig klarer, könnte man
(Student s) => s.Name == searchName
s
schreiben ist der Parameter. Da List<Student>
ist, kann der Compiler den Typ des Parameters ableiten.
In regulären C#, würden Sie es so schreiben - aber mit dieser Art von Funktionsdefinition, hat es keine Möglichkeit, auf die lokale Variable searchName
zugreifen, so dass Sie etwas ungeschickt machen müssen, um diese Arbeit zu machen. Ein Lambda-Ausdruck kann alle lokalen Variablen "sehen", in denen er definiert ist, was alles vereinfacht.
function bool Predicate(Student s) {
return s.Name == searchName;
}
FirstOrDefault kann null zurück.
Wenn Sie eine Ausnahme auf einen fehlenden Schüler werfen wollen, oder auf redundanten Schülernamen (beide klingen wie eine schlechte Idee, im speziellen Fall von Studenten), können Sie benötigen genau eine Übereinstimmung:
var student = students.Single(s => s.Name == searchName);
wenn es könnten auch mehrere sein, und Sie wollen sie alle,
var studentEnumeration = students.Where(s => s.Name == searchName);
Das wird eine Abfrage zurückgeben, können Sie eine Schleife durch:
foreach (var student in studentEnumeration) {
// Rap each student on the knuckles with a ruler
}
Ich würde sagen, es könnte schlecht ratsam sein, Single zu verwenden, aus Gründen Es ist sicherlich für zwei Personen gültig, denselben Vor- und Nachnamen zu haben. – user2366842
@ user2366842 Ich stimme zu. –
- 1. Wie bekomme ich eine Liste von einer benutzerdefinierten Liste?
- 2. ein Objekt aus einer untergeordneten Klasse
- 3. Wie bekomme ich die Liste der Eigenschaften einer Klasse?
- 4. Wie bekomme ich den Typ ein Objekt in einer generischen Liste, die einer abstrakten Klasse in C# zugeordnet ist?
- 5. ZF2: Wie bekomme ich ServiceManager-Instanz aus der benutzerdefinierten Klasse
- 6. Wie bekomme ich ein Objekt von einer Klasse in eine andere Klasse?
- 7. Wählen Sie ein Element aus einer benutzerdefinierten Spalte aus einer Liste
- 8. Wie bekomme ich ein Array von einer anderen Klasse
- 9. Wie bekomme ich den Namen einer Mootools-Klasse aus
- 10. Wie bekomme ich eine Liste von Objekten aus einer jlist
- 11. Wie kann ich Objekt aus einer anderen Klasse
- 12. Speicher auf ein Objekt einer Klasse Zuweisung
- 13. Wie bekomme ich ein Common-Objekt von einer Tabellen-ID?
- 14. AS3 - Wie bekomme ich ein Array von Konstanten einer Klasse?
- 15. Drucken einer Liste von Objekten der benutzerdefinierten Klasse
- 16. Wie entferne ich ein Objekt aus einer Listensammlung?
- 17. Wordpress-Funktionen in einer benutzerdefinierten Klasse aufrufen
- 18. Foreach geerbt (Sub-Klasse) -Objekt in einer Super-Klasse-Liste
- 19. Wie kann ich ein anderes Objekt innerhalb einer Klasse verwenden?
- 20. Wie bekomme ich ein bestimmtes abgeleitetes Objekt in einer Liste <T>?
- 21. Neues Objekt aus einer anderen Klasse
- 22. C++ ein Objekt einer anderen Klasse zuweisen
- 23. Wie wähle ich ein Listenelement aus einer geordneten Liste?
- 24. Wie bekomme ich ein referenziertes Objekt aus TableCell in JavaFX?
- 25. Instanziieren Sie ein Objekt aus einer dynamisch generierten Klasse
- 26. Erstelle ein Observables Objekt aus einer Liste von Observablen
- 27. Wie speichere ich eine Instanz einer benutzerdefinierten Klasse in onSaveInstanceState?
- 28. Wie das gemeinsame Feld aus einer Liste von Objekt erhalten
- 29. Erhalten Sie ein bereits vorhandenes Objekt aus einer anderen Klasse
- 30. wie bekomme ich Bitsperpixel aus einer Bitmap
Wissen Sie, wie man eine Schleife schreibt? –
Wie für, während etc.? Ja, aber ich bin nicht so vertraut mit der foreach-Schleife. – dvs
Sie haben also eine Liste von Objekten des Typs Student? und Sie möchten eine basierend auf der Namenseigenschaft der Studentenklasse herausziehen? –