Maison >développement back-end >C++ >ToList() de C# crée-t-il une copie complète ou une copie superficielle des éléments de la liste ?

ToList() de C# crée-t-il une copie complète ou une copie superficielle des éléments de la liste ?

DDD
DDDoriginal
2025-01-04 00:28:39697parcourir

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

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

En C#, ToList() est une méthode qui crée une nouvelle liste avec des copies des éléments de la liste existante. Dans le cas de types référence comme les classes, les copies contiennent des références aux mêmes objets que les originaux.

Considérez le code suivant :

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

Dans ce code, la méthode ChangeToList prend un liste d'objets MyObject et la convertit en une nouvelle liste à l'aide de ToList(). Il modifie ensuite la propriété SimpleInt du premier objet de la nouvelle liste.

Le point clé à noter ici est que MyObject est un type référence. Par conséquent, l'opération ToList() crée une nouvelle liste, mais les éléments de la nouvelle liste sont des références aux mêmes objets de la liste d'origine. Par conséquent, lorsque la propriété SimpleInt de l'objet référencé dans la nouvelle liste est modifiée, le changement est également répercuté sur l'objet correspondant dans la liste d'origine. C'est pourquoi le résultat de la méthode RunChangeList() serait 5, car la modification apportée dans la nouvelle liste est propagée à 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!

Déclaration:
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