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 :

problème de cast


Sujet :

C#

  1. #1
    Membre actif Avatar de grinder59
    Inscrit en
    Septembre 2005
    Messages
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    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 : 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
    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
    Architecte C#
    Inscrit en
    Février 2003
    Messages
    78
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte C#

    Informations forums :
    Inscription : Février 2003
    Messages : 78
    Points : 144
    Points
    144
    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
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 90
    Points : 143
    Points
    143
    Par défaut
    Salut.
    Tu pourrais aussi modifier un peu ton ==
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    707
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 707
    Points : 215
    Points
    215
    Par défaut
    c'est clair ! Merci !

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

Discussions similaires

  1. [CASTS]problème de cast de Time
    Par DeVoN dans le forum Langage
    Réponses: 7
    Dernier message: 22/02/2006, 17h24
  2. [JDBC Driver][JSTL] Problème de cast de données
    Par GyLes dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 27/09/2005, 10h00
  3. problème de cast!
    Par LaseLiep dans le forum Langage
    Réponses: 3
    Dernier message: 03/06/2005, 09h30
  4. Problème de cast/serialization/externalization ?
    Par Linlin dans le forum CORBA
    Réponses: 1
    Dernier message: 06/12/2004, 16h46
  5. [C#] Problème de casting de @IDENTITY
    Par bilb0t dans le forum Accès aux données
    Réponses: 7
    Dernier message: 03/09/2004, 09h42

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