IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Clone d'une list d'objet


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut Clone d'une list d'objet
    Bonjour,

    Petite question , sur un de mes objets j'ai implémenté l'interface Icloneable pour pourvoir cloner mon objet.

    Cet objet contient une list<T>

    Ma question est dans la méthode clone(), comment je fais une copie de le liste en étant sûr que les valeurs de ma liste seront vraiment des copies et pas des références.
    Dans le sens ou si je change une valeur de la nouvelle liste ca ne changera pas la valeur de l'ancienne.

    J'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newGroup.Products = New List<Product>(this.Products)
    Et en regardant un peut le constructeur de la class list<T> dans reflector
    Il utilise la méthode CopyTo de la source
    Qui a son tour utilise la Copy de la classe Array
    Qui au final arrive sur une méthode internal.

    Donc est ce que cette méthode copy de la class Array copie bien une nouvelle instance?

    Merci a ceux qui auront la patience de me lire .

  2. #2
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    Comme ça je ne sais pas mais pourquoi ne fais-tu pas le test ?
    Tu sera fixé

    Tiens nous au courant

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    LOL Bon d'accord j'avais la flegme et le cas se presenter sur un objet d'un objet que j'utilise pas en tous cas je sais pas encore ou il est utilisé.(Je reprend un projet).

    Allez Je vais me faire un petit projet de test . Je vous dis ca.

  4. #4
    Membre chevronné Avatar de jacky01
    Profil pro
    Développeur .NET
    Inscrit en
    Juin 2007
    Messages
    537
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Juin 2007
    Messages : 537
    Par défaut
    lol

    Merci

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Bon ayez j'ai testé.

    Et comme la logique le voulez si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newGroup.Products = New List<Product>(this.Products)
    évidement ca gardera la référence tout comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newGroup.Products = New List<Product>(this.Products.toArray().Clone())
    Cette dernière marche que pour les type value et pas les type référence. Derrière C'est MemberWiseClone() qui est faite et donc garde les référence.

    un des moyen de cloner une list<T> est comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     List<Product> newGroup.Products = new List<Product>(this.Products.Count);
    firstlisting.ForEach(item => newGroup.Products.Add((Product)item.Clone()));
    évidement il faut que votre type hérite de ICloneable.
    Dans ce cas ca marche bien. la copie est bien faite.

    Merci jacky01 de m'avoir motivé, au final ce fut très intéressant.

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/05/2006, 19h20
  2. Créer une liste d'objets statiques dans une classe
    Par crossbowman dans le forum C++
    Réponses: 3
    Dernier message: 13/03/2006, 09h11
  3. methode qui retourne une liste d'objets du meme type
    Par anoukhan dans le forum Oracle
    Réponses: 8
    Dernier message: 12/01/2006, 18h38
  4. Tri d'une liste d'objet CObList
    Par cjacquel dans le forum MFC
    Réponses: 1
    Dernier message: 13/07/2005, 13h50
  5. [MFC] Retourner une liste d'objets
    Par 1cado dans le forum MFC
    Réponses: 10
    Dernier message: 28/07/2003, 12h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo