1

私が試してみると:

List<Student> students = new List<Student>();
List<Group> Groups = new List<Group>();
Groups = students.Remove(f => f.StudentID.Equals(studentID));

次の行でエラーが発生します。f => f.StudentID.Equals(studentID)

ここの以前の投稿で問題が発生しています

したがって、グループ内に含まれる学生を削除できるのではないかと考えましたが、デリゲート型ではないため、ラムダ式を学生型に変換できませんというエラーが表示されます。

私がやろうとしていることについて簡単に説明します。学生 Aが複数のグループに所属できるとしましょう。次に、その生徒を削除すると、その生徒はグループをリストしなくなります。しかし、そうです。しかし、グループコンピューティングを検索すると、学生はそこにいません。私が学生を連れて行き、彼が属しているグループを検索したときだけのようです(彼が削除されていても)、最初に彼を追加したグループが返されます。これは起こるべきではありません

4

3 に答える 3

7

述語を渡そうとする場合は、RemoveAllメソッドを使用する必要があります。Removeメソッドは 1 つの要素を受け取ります

var numRemoved = students.RemoveAll(f => f.StudentID == studentID);

また、RemoveAll メソッドは「更新された」リストを返さず、リストを更新します。そのため、リストが更新されます。つまりstudents、 の生徒はいませんStudentID == studentID

をそのまま保持する場合studentsは、要素を新しいリストにコピーします

var newStudentList = new List<Student>(students);

次に、そのリストをフィルタリングします

PS 両方のリストの共通オブジェクトは同じです。つまり、オブジェクトが 1 つのリストで更新されると、2 番目のリストでも更新されます。2 つ目のコピーが必要な場合は、ディープ クローニングを実装する必要があります。これは、同じオブジェクト プールからの 2 つのリストです。

var numRemoved = newStudentList.RemoveAll(f => f.StudentID == studentID);

あなたの更新で、あなたが探しているようです

students.RemoveAll(s => s.StudentID == studentID);
Groups.ForEach(g => g.Groupsz.RemoveAll(gs => gs.StudentID == studentID));
于 2012-04-12T17:31:02.740 に答える
2

試してみてくださいRemoveAll........

于 2012-04-12T17:31:05.793 に答える