Précédent   Forum du club des développeurs et IT Pro > Dotnet > Langages > C#
C# Forum d'entraide sur la programmation C#. Avant de poster -> FAQ C#, Articles C#, Sources C#
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 10h29   #1
grinder59
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 568
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 568
Points : 134
Points : 134
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 !
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 15h47   #2
Vimaire
Membre habitué
 
Homme Alexandre Trigueros
Architecte C#
Inscription : février 2003
Messages : 74
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 : 74
Points : 133
Points : 133
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.
Vimaire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 20h29   #3
zhouyu
Membre habitué
 
Avatar de zhouyu
 
Homme Loïc
Étudiant
Inscription : octobre 2009
Messages : 83
Détails du profil
Informations personnelles :
Nom : Homme Loïc
Âge : 25
Localisation : France

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : octobre 2009
Messages : 83
Points : 129
Points : 129
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 .
zhouyu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 07h14   #4
grinder59
Membre habitué
 
Avatar de grinder59
 
Inscription : septembre 2005
Messages : 568
Détails du profil
Informations forums :
Inscription : septembre 2005
Messages : 568
Points : 134
Points : 134
c'est clair ! Merci !
grinder59 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 18h49.


 
 
 
 
Partenaires

Hébergement Web