Unable to cast / cannot convert type

Résolu
philipina Messages postés 50 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 4 décembre 2013 - 1 avril 2008 à 12:32
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 - 1 avril 2008 à 14:19
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

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 avril 2008 à 14:07
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]
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 avril 2008 à 14:08
lien sur msdn : http://msdn2.microsoft.com/en-us/library/xhbhezf4.aspx

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
3
xmox667 Messages postés 357 Date d'inscription jeudi 8 juin 2006 Statut Membre Dernière intervention 26 décembre 2011 4
1 avril 2008 à 14:06
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+
0
philipina Messages postés 50 Date d'inscription mardi 5 mars 2002 Statut Membre Dernière intervention 4 décembre 2013
1 avril 2008 à 14:14
Merci pour vos réponses.

 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
1 avril 2008 à 14:19
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]
0
Rejoignez-nous