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 :

Pouvez-vous m'expliquer cette méthode générique (Copie d'un Objet) [Débutant]


Sujet :

C#

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut Pouvez-vous m'expliquer cette méthode générique (Copie d'un Objet)
    Bonjour,

    Est-ce que vous pouvez m'expliquer la méthode suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public static void CopyTo<T>(T S, T D)
            {
                foreach (var pS in S.GetType().GetProperties())
                {
                    foreach (var pT in D.GetType().GetProperties())
                    {
                        if (pT.Name != pS.Name) continue;
                        (pT.GetSetMethod()).Invoke(D, new object[] { pS.GetGetMethod().Invoke(S, null) });
                    }
                }
            }
    D'avance merci

  2. #2
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    y'a pas spécialement grand chose à expliquer en fait
    C'est une méthode qui "copie" un objet dans un autre (qui assigne les valeurs des propriétés de S dans celles de D).
    Pour ce faire l'idée générale étant de boucler (via la réflexion) sur les propriétés du type et d'invoquer le setter et le getter des propriétés, pour "assigner l'un à l'autre".

    Après ce code n'est pas génial, comme les deux arguments (S et D) sont du même type on pourrait ne faire qu'une seule boucler (à savoir boucler sur les propriétés de T [le type]) ; il faudrait aussi s'assurer que les propriétés possèdent un getter (ou un setter) avant de tenter de les utiliser (parce que tenter d'utiliser un setter sur une propriété en lecture seule ça risque d'être drôle) et sans doute d'autres sources de problèmes auxquelles je n'ai pas pensé
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  3. #3
    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
    Points : 5 195
    Points
    5 195
    Par défaut
    Ca fait la copie comme dit précédemment.

    Après, en dehors d'optimisation, c'est surtout que si le membre à copier est une liste, on n'aura pas une vraie copie de la liste puisqu'il, en toute logique,
    faire une copie de list consiste à créer une nouvelle liste dont le contenu est une copie de chaque élément de la liste à copier.

    Donc, pour moi, ce code fonctionne dans certains contexte mais n'est pas un vrai système de copie d'objet "universel"
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  4. #4
    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
    Points : 5 195
    Points
    5 195
    Par défaut
    Et perso, si tu fais copier complètement un objet, sans te faire "chier",

    t'as ça aussi que j'aime bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public static T DeepClone<T>(T obj)
    {
        T objResult;
        using (MemoryStream ms = new MemoryStream())
        {
            BinaryFormatter bf = new BinaryFormatter();
            bf.Serialize(ms, obj);
            ms.Position = 0;
            objResult = (T)bf.Deserialize(ms);
        }
        return objResult;
    }
    Simple, rapide, efficace (et un peu bourrin j'avoue)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre chevronné
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Points : 2 209
    Points
    2 209
    Par défaut
    Mais implique que l'objet soit Serializable ce qui n'est pas toujours le cas du coup une méthode qui choisit la "stratégie" adaptée en fonction du T qu'on lui donne peut être bien
    Nous sommes tous plus ou moins geek : ce qui est inutile nous est parfaitement indispensable ( © Celira )
    À quelle heure dormez-vous ?
    Censément, quelqu'un de sensé est censé s'exprimer sensément.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    661
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2006
    Messages : 661
    Points : 244
    Points
    244
    Par défaut
    Un grand merci à vous

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

Discussions similaires

  1. [Débutant] Pouvez-vous m'expliquer cette méthode sur les expressions
    Par jacko842 dans le forum C#
    Réponses: 4
    Dernier message: 27/05/2015, 11h44
  2. pouvez vous m'expliquer cette requet?
    Par hayat2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 19/05/2009, 07h57
  3. Pouvez vous m'expliquer ce code ?
    Par sayfouche dans le forum C#
    Réponses: 6
    Dernier message: 09/04/2008, 23h36
  4. Réponses: 1
    Dernier message: 01/10/2007, 17h32
  5. Serveur ftp pouvez vous m'expliquer svp
    Par fred59 dans le forum Dépannage et Assistance
    Réponses: 2
    Dernier message: 07/12/2006, 18h37

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