Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    septembre 2005
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : septembre 2005
    Messages : 626
    Points : 158
    Points
    158

    Par défaut problème de cast

    Bonjour,

    Afin de pouvoir comparer 2 objets, j'ai dû redéfinir les opérateurs == et !=. voici comment j'ai fait :

    Code :
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
        class Personne : IComparable
        {
            public int Age;
            public string Nom;
            public Personne(){Age = -1;Nom = "";}
            public Personne(int age, string nom){Age = age;Nom = nom;}
            public int CompareTo(object o) 
            {
                if (o == null)
                    return 1;
     
                Personne personne = o as Personne;
                if (personne != null)
                {
                    if (Age > personne.Age)
                    {
                        return 1;
                    }
                    else
                    {
                        return 0;
                    }
                }
                else
                {
                    return 0;
                }
     
            }
            public override bool Equals(object o)
            {
                Personne pe = (Personne)o;
                return (Age == pe.Age && Nom == pe.Nom);
     
            }
            public static bool operator==(Personne p1, Personne p2){
                return p1.Equals(p2);
            }
            public static bool operator!=(Personne p1, Personne p2)
            {
                return !p1.Equals(p2);
            }
            public override int GetHashCode()
            {
                return this.ToString().GetHashCode();
            }
        }

    Le problème est que dans le cadre d'un autre besoin/exercice, j'ai implémenté l'interface IComparable à ma classe Personne et dans la méthode CompareTo, j'utilise l'opérateur != pour vérifier que le résultat de mon cast n'est pas null ! Mais du coup c'est l'opérateur surchargé != qui est utilisé et non != initial. Donc le test sur le résultat de mon cast dans CompareTo ne fonctionne pas. Comment dois-je faire ?

    Merci de votre aide !

  2. #2
    Membre habitué
    Homme Profil pro Alexandre Trigueros
    Architecte C#
    Inscrit en
    février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Nom : Homme Alexandre Trigueros
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : février 2003
    Messages : 78
    Points : 139
    Points
    139

    Par défaut

    Bonjour, à ta place, j'aurai laissé le Equal de base et j'aurai crée une classe implémentant "IEqualityComparer<Personne>" pour déterminer le Equals. Du coup, tu garde le comportement par défaut avec == et != et tu utilise ton EqualityComparer dans les cas spécifiques.

  3. #3
    Membre habitué Avatar de zhouyu
    Homme Profil pro Loïc
    Étudiant
    Inscrit en
    octobre 2009
    Messages
    87
    Détails du profil
    Informations personnelles :
    Nom : Homme Loïc
    Âge : 26
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : octobre 2009
    Messages : 87
    Points : 129
    Points
    129

    Par défaut

    Salut.
    Tu pourrais aussi modifier un peu ton ==
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public static bool operator==(Personne p1, Personne p2){
       if(p1 == null)
          return (p2==null);
       else if(p2==null)
          return false;//a ce stade on sait que p1 != null
       return p1.Equals(p2);
    }
    public static bool operator!=(Personne p1, Personne p2)
    {
                return !(p1==p2);
    }
    Si Equals accepte un argument null il faut faire un test o!=null dans ta méthode .

  4. #4
    Membre actif Avatar de grinder59
    Inscrit en
    septembre 2005
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : septembre 2005
    Messages : 626
    Points : 158
    Points
    158

    Par défaut

    c'est clair ! Merci !

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •