ToList() crée-t-il une nouvelle liste ?
En C#, la méthode ToList() renvoie une nouvelle liste qui contient des éléments du recueil original. Cependant, la question se pose : crée-t-il une nouvelle liste de références ou de copies des éléments ?
Considérons l'exemple suivant :
public class MyObject { public int SimpleInt { get; set; } } 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; }
Dans ce scénario, ToList() crée un nouveau liste de références aux mêmes objets que la liste originale. En effet, MyObject est un type référence, ce qui signifie qu'il stocke l'adresse de l'objet en mémoire.
Lorsque la propriété SimpleInt d'un objet référencé dans la nouvelle liste est modifiée, la modification se propage à l'objet équivalent dans la liste originale. En effet, la nouvelle liste et la liste d'origine font référence au même objet.
Si MyObject était déclaré comme une structure au lieu d'une classe, la méthode ToList() créerait une nouvelle liste avec des copies des éléments de la liste originale. Dans ce cas, les modifications apportées aux éléments de la nouvelle liste n'affecteraient pas les éléments correspondants de la liste d'origine.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!