Heim >Backend-Entwicklung >C++ >Erstellt ToList() von C# eine tiefe Kopie oder eine flache Kopie der Elemente der Liste?

Erstellt ToList() von C# eine tiefe Kopie oder eine flache Kopie der Elemente der Liste?

DDD
DDDOriginal
2025-01-04 00:28:39697Durchsuche

Does C#'s ToList() Create a Deep Copy or a Shallow Copy of the List's Elements?

ToList(): Erstellt es eine neue Liste?

In C# ist ToList() eine Methode, die eine neue Liste mit erstellt Kopien der Elemente aus der vorhandenen Liste. Bei Referenztypen wie Klassen enthalten die Kopien Referenzen auf dieselben Objekte wie die Originale.

Betrachten Sie den folgenden Code:

public class MyObject
{
    public int SimpleInt { get; set; }
}
...
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;
}

In diesem Code benötigt die ChangeToList-Methode eine Liste von MyObject-Objekten und konvertiert sie mit ToList() in eine neue Liste. Anschließend wird die SimpleInt-Eigenschaft des ersten Objekts in der neuen Liste geändert.

Der wichtigste Punkt, den es hier zu beachten gilt, ist, dass MyObject ein Referenztyp ist. Daher erstellt die ToList()-Operation eine neue Liste, aber die Elemente in der neuen Liste sind Verweise auf dieselben Objekte in der ursprünglichen Liste. Wenn daher die SimpleInt-Eigenschaft des in der neuen Liste referenzierten Objekts geändert wird, wird die Änderung auch im entsprechenden Objekt in der ursprünglichen Liste widergespiegelt. Aus diesem Grund wäre die Ausgabe der RunChangeList()-Methode 5, da die in der neuen Liste vorgenommenen Änderungen an die ursprüngliche Liste weitergegeben werden.

Das obige ist der detaillierte Inhalt vonErstellt ToList() von C# eine tiefe Kopie oder eine flache Kopie der Elemente der Liste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn