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 :

[Erreur] IEnumerable <Object>


Sujet :

C#

  1. #1
    Membre régulier Avatar de mitnick2006
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 106
    Points
    106
    Par défaut [Erreur] IEnumerable <Object>
    salut à tous j ai plusieurs classe , je veux les utiliser comme des énumérations dans une fonction qui fais des traitements sur ces classes la.
    voila un petit exemple pour comprendre mon souci
    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 A { }
    class B {}
     
    class C {
    IEnumerable <A> a;
    IEnumerable <B> b;
    public void function()
    {
    D d = new D();
    d.function(a);
    d.function(b);
    }
     }
    classe D {
     
    public void function (IEnumerable<Object> o )
    {
    // traitement sur les énumérations des classes 
    }
     
    }
    // l'erreur c'est qu'il impossible de convertir de System.Collections.Generic.IEnumerable<a>' en System.Collections.Generic.IEnumerable<Object>
    et merci en avance
    Knoweledge Is Power In Digital World

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Réunion

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 277
    Points : 1 521
    Points
    1 521
    Par défaut
    C'est logique :

    IEnumerable<A> ne dérive pas de IEnumerable<Object> même si A dérive de Object : c'est une erreur classique de mauvaise compréhension des génériques. Par contre, IEnumerable<A> et IEnumerable<Object> implémentent bien IEnumerable (non générique). Si tu remplaces le paramètre de ta fonction (IEnumerable<Object>) par IEnumerable, tout va fonctionner.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    La covariance et contravariance sur un type générique sera possible avec C# donc normalement ce code fonctionnerait avec un compilateur C#4.

    Il est possible de faire avec C#4:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IEnumerable<object> chaines = new List<string>();
    Citation Envoyé par Kaidan Voir le message
    Par contre, IEnumerable<A> et IEnumerable<Object> implémentent bien IEnumerable (non générique).
    IEnumerable<T> hérite de IEnumerable mais la méthode GetEnumerator de IEnumerable est elle implémentée explicitement.

  4. #4
    Membre émérite Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Points : 2 925
    Points
    2 925
    Par défaut
    Sinon, tu peux modifier ta méthode en la rendant générique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void function<T>(IEnumerable<T> o)
    {
      foreach(object obj in o)
        ...
    }
    ಠ_ಠ

  5. #5
    Membre émérite Avatar de nicolas.sitbon
    Profil pro
    Inscrit en
    Août 2007
    Messages
    2 015
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 2 015
    Points : 2 280
    Points
    2 280
    Par défaut
    Citation Envoyé par harz62 Voir le message
    La covariance et contravariance sur un type générique sera possible avec C# donc normalement ce code fonctionnerait avec un compilateur C#4.
    Ah, vraiment? tu aurais plus d'info la dessus s'il te plaît, je ne savais pas que C# allait supporter la covariance sur les génériques.
    EDIT: je viens de trouver ce lien intéressant, merci quand même.
    "The quieter you become, the more you are able to hear"
    "Plus vous êtes silencieux, plus vous êtes capable d'entendre"

  6. #6
    Membre régulier Avatar de mitnick2006
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2006
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Maroc

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

    Informations forums :
    Inscription : Décembre 2006
    Messages : 163
    Points : 106
    Points
    106
    Par défaut
    Citation Envoyé par Kaidan Voir le message
    C'est logique :

    Si tu remplaces le paramètre de ta fonction (IEnumerable<Object>) par IEnumerable, tout va fonctionner.
    oui j ai remplacer IEnumerable<Object> par IEnumerable et ca marche parfaitement
    merci pour toi et pour les autres qui ont enrichi la discussion
    Knoweledge Is Power In Digital World

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

Discussions similaires

  1. Réponses: 14
    Dernier message: 14/12/2007, 15h56
  2. Réponses: 1
    Dernier message: 30/08/2007, 14h47
  3. Erreur IFS : Dangling Object AV Cleanup Agent
    Par jf4db dans le forum Administration
    Réponses: 2
    Dernier message: 30/07/2007, 18h01
  4. 8i sur Linux : Erreur loadin shared object file
    Par NGONGO ETABA dans le forum Oracle
    Réponses: 2
    Dernier message: 24/03/2006, 11h40
  5. Réponses: 6
    Dernier message: 15/01/2005, 23h34

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