Problème "InvalidCastException" en C#

Fermé
devilpredator Messages postés 29 Date d'inscription vendredi 17 juin 2011 Statut Membre Dernière intervention 4 mai 2012 - 4 mai 2012 à 02:43
Bonsoir à toutes et à tous.
Je fais actuellement face à un problème qui , disons le , me prend la tête.
En effet je réalise actuellement un programme qui va gérer des véhicules en fonction de leur type (à savoir si ce sont des voitures , des camions , des motos etc...) .
J'utilise actuellement Microsoft Visual Studio et je code en C#.
J'utilise également de l'objet , donc pour situer la partie ou j'ai un problème je décris rapidement la partie correspondante de mon UML :
- J'ai une classe Véhicule , composée de tous les attributs privé (référence , nom , prix etc...) et qui n'a pour méthode que les accesseurs "set" et "get"
- J'ai ensuite deux classe filles, Voiture et Camion, qui héritent de la classe mère Véhicule.

Mon problème est le suivant , je désirerais qu'après la saisie des informations relatives aux véhicules , ceux ci soit afficher dans une listeBox.
Donc 1ere chose positive , les informations s'affichent ...uniquement si je ne rentre qu'un type de véhicule.Si subitement l'envie me prend , après avoir ajouté 6 voitures ,d'ajouter un camion , l'erreur suivante m'est signalée : "L'exception InvalidCastException n'a pas été gérée"
Et en cliquant dessus j'ai ce message qui apparait :"Impossible d'effectuer un cast d'un objet de type 'GestionDeVehicule.Voiture' en type 'GestionDeVehicule.Camions'."

Ça fait des heures que je cherche une solution sans trouver quoi que ce soit.Je ne suis pas excellent en programmation objet mais la c'est incompréhensible.
Voici la procédure qui pose problème:

private List<Vehicule> lesVehicules=new List<Vehicule>();

private void MajList()
        {
            //Calcul du nombre de Vehicule dans la collection
            int vNbVehicule = lesVehicules.Count;
            lsListeVehicule.Items.Clear();
            
           
            for (int i = 0; i < vNbVehicule; i++)
            {

                if (cbTypeVeh.Text == "Voiture")
                {
                    
                    Voiture leVehicule;
                    leVehicule = (Voiture)lesVehicules[i];

                    //On passe la listview en mode detail
                    lsListeVehicule.View = View.Details;
                    //construction d'une ligne
                    ListViewItem MaLigne = new ListViewItem
(leVehicule.GetSetRef.ToString());
                    


                    MaLigne.SubItems.Add(leVehicule.GetSetNom);
                    MaLigne.SubItems.Add(leVehicule.GetSetPrixV.ToString());
                    MaLigne.SubItems.Add(leVehicule.GetSetAnneeProd.ToString());
                    MaLigne.SubItems.Add(leVehicule.GetSetPlace.ToString());
                    MaLigne.SubItems.Add(leVehicule.GetSetTypeE);
                    MaLigne.SubItems.Add("n/a");

                    lsListeVehicule.Items.Add(MaLigne);

                }
                else
                {
                    MessageBox.Show("Erreur");
                    Camions leVehicule;

                    leVehicule = (Camions)lesVehicules[i];
                    
                    //On passe la listview en mode detail
                    lsListeVehicule.View = View.Details;
                    //construction d'une ligne
                    ListViewItem MaLigne = new ListViewItem
(leVehicule.GetSetRef.ToString());              


                    MaLigne.SubItems.Add(leVehicule.GetSetNom);
                    MaLigne.SubItems.Add(leVehicule.GetSetPrixV.ToString());
                    MaLigne.SubItems.Add(leVehicule.GetSetAnneeProd.ToString());
                    MaLigne.SubItems.Add("n/a");
                    MaLigne.SubItems.Add(leVehicule.GetSetTypeEss);
                    MaLigne.SubItems.Add(leVehicule.GetSettonnage.ToString());

                    lsListeVehicule.Items.Add(MaLigne);


                }
               
            }

        }


Si quelqu'un peut m'aider ça me ferait bien plaisir :) .Je remercie par avance tout ceux qui pourront m'apporter leur aide.

DP