Maison > développement back-end > C++ > `ToList()` crée-t-il une copie approfondie ou simplement une copie superficielle d'une liste ?

`ToList()` crée-t-il une copie approfondie ou simplement une copie superficielle d'une liste ?

Mary-Kate Olsen
Libérer: 2024-12-30 08:56:13
original
983 Les gens l'ont consulté

Does `ToList()` Create a Deep Copy or Just a Shallow Copy of a List?

ToList() crée-t-il une nouvelle liste ?

Lors de l'utilisation de la méthode ToList(), on peut s'interroger sur son impact sur la liste d'objets existante. Cet article se penche sur le comportement de ToList() et ses implications pour l'immuabilité des objets.

Considérez le code suivant :

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;
}
Copier après la connexion

Lorsque ToList() est invoqué, il crée une nouvelle liste qui contient des références aux objets originaux. Pour comprendre cela, il est important de reconnaître que la liste d'origine (objs) contient des références à des instances de la classe MyObject. ToList() ne copie pas les objets eux-mêmes ; au lieu de cela, il reproduit la collection de références. Cela signifie que toutes les modifications apportées aux objets dans la nouvelle liste seront reflétées dans la liste d'origine car ils font tous deux référence aux mêmes objets sous-jacents.

Dans le code fourni, modification de la propriété SimpleInt d'un objet dans la liste objectList modifiera également l'objet correspondant dans la liste objs. Cela se produit car les deux listes pointent vers les mêmes instances de MyObject. En conséquence, la méthode ChangeToList renverra 5, indiquant la valeur de la propriété SimpleInt mise à jour.

Cependant, si la classe MyObject était déclarée comme une structure au lieu d'une classe, ToList() créerait une nouvelle liste contenant des copies des objets dans la liste originale. Dans ce scénario, modifier un objet dans la nouvelle liste n'affecterait pas la liste d'origine, préservant son immuabilité.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal