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 :

pourquoi ne pas comparer des génériques?


Sujet :

C#

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut pourquoi ne pas comparer des génériques?
    bonjour.

    Aujourd'hui je tatillonne les génériques, et je suis face à un probleme totalement incompréhensible pour moi !

    J'obtiens une erreur de compilation sur ce simple bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     private void OnEvent(Tevent eventIn)
            {
                foreach (StateTransition<Tevent> transition in m_TransitionList)
                {
                    if ( eventIn == transition.WantedEvent) 
                    {
    //blablabla
    }
    transition.WantedEvent retourne un Tevent
    eventIn est un Tevent

    Et j'obtiens l'erreur hallucinante :

    Error 1 Operator '==' cannot be applied to operands of type 'Tevent' and 'Tevent'
    auriez vous la moindre idée de pourquoi? ca me bloque completement.
    Merci d'avance.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    327
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 327
    Points : 402
    Points
    402
    Par défaut
    Bonjour,
    Pourquoi dans le foreach tu mets ce type StateTransition<Tevent> ?
    Ca ne serait pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foreach (Tevent transition in m_TransitionList)
    A bientôt

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    "Tevent" est un type generic ?

    Si c'est le cas il devrait être possible d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( eventIn.Equals(transition.WantedEvent) )

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Bonjour

    Je ne voulais pas vous embrouiller avec trop de code, je pense que ce mini snippet devrait te répondre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public struct StateTransition<Tevent>
        {
          //code zappé
     
            public Tevent WantedEvent
            {
                get { return m_awaitingEvent; }
            }
        }
    à noter que m_TransitionList est de type List<StateTransition<Tevent>>

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Citation Envoyé par seriousme Voir le message
    "Tevent" est un type generic ?

    Si c'est le cas il devrait être possible d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( eventIn.Equals(transition.WantedEvent) )
    en effet ca résoud le probleme, il va vraiment falloir que je me penche sur les methodes Equals et GetHashCode qui sont tres flou pour moi.

    Dans mon esprit Equals equivaut à ==

    En tout cas merci pour ton aide.

  6. #6
    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
    Est-ce que private void OnEvent(Tevent eventIn) est également dans la struct StateTransition<Tevent> ou pas ?

  7. #7
    Membre régulier
    Inscrit en
    Juin 2009
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 100
    Points : 94
    Points
    94
    Par défaut
    Citation Envoyé par giova_fr Voir le message
    Dans mon esprit Equals equivaut à ==
    Il me semble (a vérifier) que le == est utilisé pour comparer des types simples (int, double, string, etc...) et que Equals est utilisé pour comparer des objets.

    Il existe peut-etre quelques exceptions mais ca doit être ça dans la majorité des cas.

  8. #8
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    "==" peut être utilisé pour comparer des types valeur ou référence.

    Selon le type statique il provoquera une comparaison de références ou une comparaison spécifique pour les types valeur.

    "Equals" choisit la bonne comparaison au runtime.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Points : 488
    Points
    488
    Par défaut
    Merci Seriousme, en effet dans ce cas Equals semblerait mieux adapté aux generiques...

    Citation Envoyé par Kaidan Voir le message
    Est-ce que private void OnEvent(Tevent eventIn) est également dans la struct StateTransition<Tevent> ou pas ?
    non pas du tout, meme si dans la pratique Tevent de StateTransition et de Maclasse.OnEvent() seront toujours identiques.

  10. #10
    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
    Citation Envoyé par giova_fr Voir le message
    Merci Seriousme, en effet dans ce cas Equals semblerait mieux adapté aux generiques...



    non pas du tout, meme si dans la pratique Tevent de StateTransition et de Maclasse.OnEvent() seront toujours identiques.
    Dans la pratique ... mais le compilateur, il ne peut pas le savoir ...

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 06/09/2009, 14h03
  2. Réponses: 12
    Dernier message: 02/01/2009, 23h45
  3. Réponses: 4
    Dernier message: 05/06/2008, 18h14
  4. comparer des variables qui n'ont pas le même attribut
    Par stagolee dans le forum VBA Access
    Réponses: 3
    Dernier message: 05/02/2008, 11h14
  5. Réponses: 3
    Dernier message: 01/08/2006, 12h32

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