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 :

Message d'erreur "impossible de convertir implicitement le type.." [Débutant]


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut Message d'erreur "impossible de convertir implicitement le type.."
    Bonjour,


    j'ai écrit une petite méthode pour savoir si je peut faire un "return" d'une list de classe.


    Voici la description de ma petite classe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     public  class CLS_STR_EQUIPE_FOOT
         {
     
            // --------> Description Equipe <--------
            // Numéro equipe  
            public int NUM_EQUIPE;
            // Nom equipe 
            public string NOM_EQUIPE;
            //Couleur equipe 
            public string COULEUR_EQUIPE;
        }



    Et voici le code de ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    class CLS_EQUIPE_FOOT
        {
        public CLS_STR_EQUIPE_FOOT STR_EQUIPE  = new CLS_STR_EQUIPE_FOOT();
     
            public  List<CLS_STR_EQUIPE_FOOT> CHARGE_EQUIPE_FOOT()
            {
     
     
                STR_EQUIPE.NUM_EQUIPE = 1;
                STR_EQUIPE.NOM_EQUIPE = "LES BONDISSANTS";
                STR_EQUIPE.COULEUR_EQUIPE = "ROUGES & BLANCS";
     
                STR_EQUIPE.NUM_EQUIPE = 2;
                STR_EQUIPE.NOM_EQUIPE = "LES VERTS";
                STR_EQUIPE.COULEUR_EQUIPE = "VERTS & BLANCS";
     
                STR_EQUIPE.NUM_EQUIPE = 3;
                STR_EQUIPE.NOM_EQUIPE = "LES VIOLETS";
                STR_EQUIPE.COULEUR_EQUIPE = "VIOLET & BLANCS";
     
     
                return (STR_EQUIPE); 
     
     
            }
     
        }

    Le compilateur me rejette le "return (STR_EQUIPE) avec le message :

    "Impossible de convertir implicitement le "WINDEV_CLASS_DLL.STR_EQUIPE_FOOT" en 'Système.Collections.Generic.List<WINDEV_CLASS_DLL.CLS_STR_EQUIPE_FOOT>


    Je ne comprends pas le message . Normalement, j'ai le droit de renvoyer une liste de classe depuis une méthode ?


    Merci pour votre aide .

  2. #2
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par LIANAZEL Voir le message
    Je ne comprends pas le message . Normalement, j'ai le droit de renvoyer une liste de classe depuis une méthode ?
    Bonjour,

    Le message t'indique que tu essaye de retourner un STR_EQUIPE_FOOT au lieu d'un List<STR_EQUIPE_FOOT>.

    Donc oui, ta méthode doit renvoyer une liste d'objet, mais tu ne renvoies qu'un objet (et non la liste du coup...)

    PS: le nommage en majuscule rend la lecture du code plus difficile... Généralement les nommage qu'en majuscule sont préférés pour les propriétés constantes.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour Zenzitone,


    Merci pour ta réponse.


    Je débute vraiment en C#, et je n'ai pas bien saisi le sens de ta réponse.


    Comment faire justement pour renvoyer la liste ?

    si je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return List<STR_EQUIPE>;

    j'ai aussi une erreur du compilateur : "'List<STR_EQUIPE>' est un type qui n'est pas valide dans le contexte donné".

    Je tourne en rond ...!

  4. #4
    Membre régulier

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2005
    Messages : 53
    Points : 114
    Points
    114
    Par défaut
    Bonjour ,si tu regarde bien dans ta fonction à aucun moment tu n'as crée de list, ce que tu as fais c'est assigner 3 valeur différentes à un même objet puis renvoyer cette objet.

  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
    Il faudrait peut-être songer à lire un tutoriel vu les lacunes sur des éléments quand même plutôt basiques du langage (qui a priori fonctionne différemment du langage que tu sembles connaître à savoir Windev [au jugé du nom du namespace])

    Sinon ta méthode doit créer une liste qui sera retournée puis pour chaque élément qu'elle va contenir créer un objet de ce type, renseigner ses champs/attributs et enfin l'ajouter à la liste sus-mentionnée.
    Au passage cette classe pourrait être revue ; des champs publics c'est pas forcément le plus adapté ; à la rigueur des propriétés (en lecture seule ?) et un constructeur prenant les différentes valeurs à renseigner pourrait être judicieux.


    Citation Envoyé par ZenZiTone Voir le message
    PS: le nommage en majuscule rend la lecture du code plus difficile... Généralement les nommage qu'en majuscule sont préférés pour les propriétés constantes.
    En fait la "norme" du framework concernant les constantes (qui semble être la même que pour les champs statiques en lecture seule) est plutôt le PascalCase (exemple (const) int.MinValue ; (static readonly) string.Empty) ; après il y a des exceptions (les premières [seules ?] qui me viennent sont les constantes mathématiques : Math.PI ou Math.E [mais là c'est aussi bien UPPERCASE que PascalCase ])
    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 du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Bonjour,


    Merci pour vos infos, voilà j'y suis arrivé :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     class CLS_EQUIPE_FOOT
        {
            // [ Instancie ma nouvelle liste ]
            public List<CLS_STR_EQUIPE_FOOT> STR_EQUIPE = new List<CLS_STR_EQUIPE_FOOT>() ;
     
            public  List<CLS_STR_EQUIPE_FOOT> CHARGE_EQUIPE_FOOT()
            {
     
                // [ Alimente un premier poste de la liste "STR_EQUIPE" ]
                STR_EQUIPE.Add(new CLS_STR_EQUIPE_FOOT() { NUM_EQUIPE = 1, NOM_EQUIPE = "LES BONDISSANTS", COULEUR_EQUIPE = "ROUGES & BLANCS" });
     
                // [ Alimente un deuxieme poste de la liste "STR_EQUIPE" ]
                STR_EQUIPE.Add(new CLS_STR_EQUIPE_FOOT() { NUM_EQUIPE = 2, NOM_EQUIPE = "LES RUGISSANTS", COULEUR_EQUIPE = "VERTS & BLANCS" });
     
                // [ Alimente un troisieme poste de la liste "STR_EQUIPE" ]
                STR_EQUIPE.Add(new CLS_STR_EQUIPE_FOOT() { NUM_EQUIPE = 2, NOM_EQUIPE = "LES ATTAQUANTS", COULEUR_EQUIPE = "ORANGES & BLANCS" });
     
                return STR_EQUIPE; 
     
     
            }
     
        }

    Sehnsucht,

    Tu as raison, mais je lis les tutos et c'est vrai que c'est pas évident de naviguer entre Windev et C#.

    La POO windev et la POO C#, c'est ( un peu ) différent.

    Ceci dit, je découvre C#, et ce langage me plait beaucoup.

    Cordialement,

  7. #7
    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
    Ça "fonctionne" c'est sûr ; par contre c'est pas forcément ce que tu souhaites comme "fonctionnement" ; par exemple si on appelle 2 fois CHARGE_EQUIPE_FOOT, on va se retrouver avec une liste d'équipes [note au passage outre le nommage; STR_EQUIPE c'est pas forcément judicieux comme choix ; là perso je m'attends à la rigueur à une chaine contenant un nom d'équipe ou la décrivant ; pas à une liste] de 6 éléments ; les 3 que tu mets en double, pas certain que ce soit désiré.
    Si j'ai bien raison ; il te suffit alors juste de bien respecter ce que j'ai décrit précédemment :
    Sinon ta méthode doit créer une liste qui sera retournée
    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.

  8. #8
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Merci pour ton conseil Sehnsucht ,

    Mais que veux tu dire par créer une liste dans la méthode.

    N'est-elle pas déjà créée ?

    Désolé d'insister lourdement, mais je suis débutant en C#

    L'instruction ci dessous ne crée pas t-elle cette fameuse liste ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<CLS_STR_EQUIPE_FOOT> STR_EQUIPE = new List<CLS_STR_EQUIPE_FOOT>();

    J.C

  9. #9
    Membre expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2013
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 563
    Points : 3 404
    Points
    3 404
    Par défaut
    Citation Envoyé par LIANAZEL Voir le message
    L'instruction ci dessous ne crée pas t-elle cette fameuse liste ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<CLS_STR_EQUIPE_FOOT> STR_EQUIPE = new List<CLS_STR_EQUIPE_FOOT>();

    J.C
    Effectivement, cette instruction te créé bien la liste. En revanche, elle créée au niveau de la classe. Ce qui veux dire que ta variable est accessible par d'autres. Dans l'idée il faudrait, dans ta méthode, créer une nouvelle liste qui serait retournée. Tu pourrais ainsi affecter variable STR_EQUIPE avec la valeur de retour de ta méthode:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    List<CLS_STR_EQUIPE_FOOT> STR_EQUIPE ;
     
    public CLS_EQUIPE_FOOT()
    {
    STR_EQUIPE = CHARGE_EQUIPE_FOOT();
    }
     
     public  List<CLS_STR_EQUIPE_FOOT> CHARGE_EQUIPE_FOOT()
            {
              var List<CLS_STR_EQUIPE_FOOT> resultat = new List<CLS_STR_EQUIPE_FOOT>();
              //[...]
                return resultat; 
     
     
            }

  10. #10
    Membre du Club
    Inscrit en
    Mai 2008
    Messages
    102
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 102
    Points : 66
    Points
    66
    Par défaut
    Merci ZenZitone,


    J'ai compris, merci beaucoup pour vos enseignements...


    Je pose une autre question, qui n'a rien avoir :
    Je travaille sur un assembly en C# et je me sui rendu compte que l'on ne peut pas le débugger sans passer par la définition d'un nom fort et le stockage de l'assembly dans le "global Assembly cache".

    En fouillant sur le net, j'ai compris pour la définition du nom fort, en revanche le stockage dans le GAC reste toujours un mystère pour moi , je n'ai pas saisi la mécanique ...

    Si vous avez deux minutes pour m'expliquer....


    J.C


    J.C

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

Discussions similaires

  1. [Débutant] Impossible de convertir implicitement le type 'string' en 'int?'
    Par Mougain's dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/11/2014, 14h29
  2. Réponses: 15
    Dernier message: 01/03/2011, 16h21
  3. Réponses: 6
    Dernier message: 22/07/2009, 15h27
  4. Réponses: 5
    Dernier message: 27/06/2006, 12h27
  5. svrmgr30 - message d'erreur destination impossible
    Par pascale86 dans le forum Oracle
    Réponses: 4
    Dernier message: 08/12/2005, 15h58

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