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