次のコードはstudentクラスとstudentクラスのclonedStudentListの2つです。私は一つのリストを更新していますが、他のリストは変更すべきではありません。しかしそれでも変わっています。 私はちょうど学生がstudentId2を持っているかどうかチェックしています。studentListから新しい値を取得することによってclonedStudentListのStudentId値を更新します。studentId2値がない場合、clonedStudentListのStudentId値を更新します。 studentid refの辞書はディープコピーの場合でも、1つのリスト内の更新によって他のものが変更されています。C#
var clonedStudentList = studentList.ToList();
clonedStudentList.ForEach(x =>
{
studentList.ForEach(y =>
{
if (y.StudentId2.HasValue && StudentIds2Dictionary.ContainsKey(y.StudentId2.Value))
{
x.StudentId= StudentIds2Dictionary[y.StudentId2.Value];
}
else if(StudentIdsDictionary.ContainsKey(y.StudentId.Value))
{
x.StudentId= StudentIdsDictionary[y.StudentId.Value];
}
});
});
私も
var clonedStudentList = new List<Student>(studentList);
が、それでも同じ問題を使用していました。
助けが必要ですか?
studentListには、新しいリストを作成するための参照が含まれています。同じオブジェクトを操作しています。生徒を複製する必要がある場合は、コピーする必要があることを知っている学生の中に独自のメソッドを作成し、新しい生徒を作成し、値をコピーしてコピーした生徒を返します。 –
@パトリック:深いコピーは私たちが同じことをするのを助けるものではありません。他の変更があればそのリストを変更しません。実際にstudentListのすべての内容を新しいリストに入れたいと思います。同じになります。 –
あなたのコードはどこから深いコピーをしていると思いますか? –