Unable to cast / cannot convert type [Résolu]

Signaler
Messages postés
50
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
4 décembre 2013
-
sebmafate
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
-
Bonjour,

J'ai un petit problème de casting d'objet.
Dans mon code j'ai 2 definitions d'object ayant la même format.
Les objects aaa et bbb
-------------------------------------
       public partial class aaa
        {

            private string nom;

            private string prenom;

            //GET AND SET
            public string lenom
            {
                get
                {
                    return this.nom;
                }
                set
                {
                    this.nom = value;

                }
            }
            public string leprenom
            {
                get
                {
                    return this.prenom;
                }
                set
                {
                    this.prenom = value;
              
                }  
           
            }
       
        }

        public partial class bbb
        {

            private string nom;

            private string prenom;

            //GET AND SET
            public string lenom
            {
                get
                {
                    return this.nom;
                }
                set
                {
                    this.nom = value;

                }
            }
            public string leprenom
            {
                get
                {
                    return this.prenom;
                }
                set
                {
                    this.prenom = value;

                }

            }

        }
--------------------------------

Je voudrais remplir un object de type aaa et le copier (via un casting) dans un object de type bbb avec le code suivant:
-----------------------------
            aaa testA = new aaa();
            bbb testB = new bbb();

            testA.lenom = "Brika";
            testA.leprenom = "Remi";

            testB = (bbb)testA;
---------------------------

Avec ce code j'obtiens l'erreur "cannot convert type 'aaa' to 'bbb' "
Mes objects réels dans mon code son beaucoup plus grand c'est pourquoi je voudrais éviter de copier tous les parametres 1 par 1 d'un object à un autre.

Pouvez-vous me dire comment serait-il possible de résoudre ce problème?

Merci d'avance pour votre aide.

Alain
-----------------------------

Remi

5 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
il faut que tu crées une méthode pour le cast explicit :

public static explicit operation bbb(aaa a) {


   bbb b = new bbb();
   b.lenom = a.lenom;
   b.leprenom = a.leprenom;

   return b;


}

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
lien sur msdn : http://msdn2.microsoft.com/en-us/library/xhbhezf4.aspx

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
Messages postés
357
Date d'inscription
jeudi 8 juin 2006
Statut
Membre
Dernière intervention
26 décembre 2011
3
Salut,
J'ai une question, pourquoi dans ton code réel tu as des classes dont le contenu est identique mais dont le nom est différent.
Dans ton exemple si la class bbb hérite de la class aaa celà fonctionne.

public class bbb : aaa
{
}

aaa a = new aaa();
a.lenom = "tata";
a.leprenom = "titi";
bbb b = (bbb)a;

Si tu as des classes dont une partie du code est commune tu dois utilisé le mécanisme d'héritage.
Si tu ne peux pas, parce que  les classes hérite déjà d'une autre classe, tu peux faire ceci:

public class bbb
{
    //raccourci syntaxique de visual studio 2008 pour les propriétées
    public string lenom { get; set; }
    public string leprenom { get; set; }
 
     public bbb(aaa a)
    {
        Set(a);      
    }

    public void Set(aaa a)
    {
        lenom = a.lenom;
        leprenom = a.leprenom;
    }

}

aaa a = new aaa();
a.lenom = "tata";
a.leprenom = "titi";
bbb b = new bbb(a);

A+
Messages postés
50
Date d'inscription
mardi 5 mars 2002
Statut
Membre
Dernière intervention
4 décembre 2013

Merci pour vos réponses.

 
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
hum... parfois il faudrait que je relise...

public static explicit operator bbb(aaa a) {
   bbb b = new bbb();
   b.lenom = a.lenom;
   b.leprenom = a.leprenom;

   return b;

}

à mettre dans la classe aaa biensûr !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]