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 :

Copie PHYSIQUE de Liste


Sujet :

C#

  1. #1
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut Copie PHYSIQUE de Liste
    Bonjour

    Je suis a nouveau confronté a un problème tres casse pipe

    Je dispose d'une List<T> de classes CT
    Je souhaite construire un array de classe CT a partir de cette Liste mais les éléments de mon array doivent etre totalement indépendant de ma liste de base

    J'ai essayé le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List.ToArray;
    //ou  le
     Array.Copy(List.ToArray, etc)
    Rien n'y fait !!

    C'est le coup qui me fait regreter les pointeurs en C, au moins on savait ce qu'on faisait de maniere Explicite !

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    beh alors peut-etre fournir un constructeur de copy ou une fonction de clonage avec le MemberwiseClone() ?

  3. #3
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    C'est la misere totale ce truc !!
    J'ai tout essayé
    La doc MemberwiseClone() dit bien qu'il s'agit AUUSI d'une copie superficielle

    En fait si je comprends bien une List ou ne contient que des references a des objets et il n'est pas possible de creer une nouville liste de nouveaux objets

    Il faut donc vraiment recreer les objets un a un et constituer une nouvelle liste ou un array de toute pieces

    Ici je regrette vraiment la souplesse des pointeurs et memmove en C

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Tu peux modifier ta classe pour qu'elle implémente ICloneable...

  5. #5
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Par défaut
    oui on peut raler mais en programmation objet, ce que tu souhaites faire s'appuie sur le constructeur par copie...

    Du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    class toto
    {
      public toto(toto)
      {...};
    }
    Donc, je ne suis pas choqué que cela se produise en C# egalement et que tu sois obligé de le faire ..

    Désolé mais ca parait assez logique comme comportement !!!

    D'ailleurs, prends comme exemple la classe Region... du framework, elle implémente la méthode Clone()....

  6. #6
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Merci TheMonz
    C'est la solution que j'ai prise pour le moment

    Merci TomLev

    Ta solution est certainement aussi bonne m'est elle m'inquiète un peu plus car en admettant qu'on finisse a s'habituer a ce comportement par reference implementer Iclonable va, si je ne me trompe, introduire de maniere implicite un comportement différent sur cette classe qui risque aussi d'engendrer tot ou tard des
    "Mais pourquoi ca ne marche pas ici"

    Donc en definitive passer par un constructeur explicite de VRAI clonage me semble plus facilement tracable !

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par olibara Voir le message
    implementer Iclonable va, si je ne me trompe, introduire de maniere implicite un comportement différent sur cette classe qui risque aussi d'engendrer tot ou tard des
    "Mais pourquoi ca ne marche pas ici"
    Implémenter une interface n'introduit aucun comportement implicite... tu appelles la méthode Clone où tu ne l'appelles pas, c'est comme tu veux... par défaut, les objets de ta classe seront toujours manipulés par référence.

    Si tu veux des objets qui, par défaut, sont gérés par valeur, fait des struct et non des classes

  8. #8
    Membre expérimenté
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Par défaut
    Compris 5/5

    Merci TomLev

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie Logique et copie physique
    Par GDMINFO dans le forum Langage
    Réponses: 6
    Dernier message: 16/04/2007, 11h53
  2. Copie d'une liste
    Par ApprentiOracle dans le forum Général Python
    Réponses: 5
    Dernier message: 09/03/2007, 16h07
  3. Installer Windows XP pro à partir d'une copie physique
    Par samsso2006 dans le forum Windows XP
    Réponses: 1
    Dernier message: 11/10/2006, 15h03
  4. [JList] copie d'une liste à une autre
    Par delph1983 dans le forum Composants
    Réponses: 5
    Dernier message: 16/05/2006, 15h16
  5. Constructeur par copie et std::list
    Par Captain_JS dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/12/2005, 19h15

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