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; }
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!