Bei Verwendung der ToList()-Methode fragt man sich möglicherweise, welche Auswirkungen sie auf die vorhandene Liste von Objekten hat. Dieser Artikel befasst sich mit dem Verhalten von ToList() und seinen Auswirkungen auf die Unveränderlichkeit von Objekten.
Beachten Sie den folgenden Code:
public void RunChangeList() { var objs = new List<MyObject>(){ new MyObject() { SimpleInt = 0 } }; var whatInt = ChangeToList(objs); } public int ChangeToList(List<MyObject> objects) { var objectList = objects.ToList(); objectList[0].SimpleInt = 5; return objects[0].SimpleInt; }
Wenn ToList() aufgerufen wird, wird eine neue Liste erstellt enthält Verweise auf die Originalobjekte. Um dies zu verstehen, ist es wichtig zu erkennen, dass die ursprüngliche Liste (objs) Verweise auf Instanzen der MyObject-Klasse enthält. ToList() kopiert nicht die Objekte selbst; Stattdessen wird die Sammlung von Referenzen repliziert. Dies bedeutet, dass alle an Objekten in der neuen Liste vorgenommenen Änderungen in der ursprünglichen Liste widergespiegelt werden, da beide auf dieselben zugrunde liegenden Objekte verweisen.
Im bereitgestellten Code wird die SimpleInt-Eigenschaft eines Objekts in der objectList-Liste geändert ändert auch das entsprechende Objekt in der Objs-Liste. Dies liegt daran, dass beide Listen auf dieselben Instanzen von MyObject verweisen. Als Ergebnis gibt die Methode ChangeToList 5 zurück, was den aktualisierten SimpleInt-Eigenschaftswert angibt.
Wenn die MyObject-Klasse jedoch als Struktur statt als Klasse deklariert würde, würde ToList() eine neue Liste mit Kopien erstellen der Objekte in der Originalliste. In diesem Szenario hätte die Änderung eines Objekts in der neuen Liste keine Auswirkungen auf die ursprüngliche Liste, sodass ihre Unveränderlichkeit erhalten bleibt.
Das obige ist der detaillierte Inhalt vonErstellt „ToList()' eine tiefe Kopie oder nur eine flache Kopie einer Liste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!