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 :

Comment savoir ce qui différencie deux objets ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut Comment savoir ce qui différencie deux objets ?
    Bonjour,

    Petite question du jour :
    J'ai à un moment deux Table dans mon programme. (Microsoft.Office.Interop.Word.Table pour être plus explicite)

    Or à un moment j'ai besoin de comparer deux Table pour savoir si elles sont les même et selon le résultat effectuer un traitement ou un autre.

    J'ai donc, bien évidemment, utilisé la méthode de la classe Object comme je fais pour tout autre objet...

    Seulement, le hic, c'est que ça me renvoie toujours false, alors que je suis kasi certain d'avoir deux tables identiques !!

    Donc, en mettant un point d'arrêt sur la méthode Equals(), je regarde les deux tables et je vois qu'elles ont tous leurs membres et autre propriétés identiques ... mais Equals() me renvoi quand même false

    Vu le grand nombre de membres et propriétés, peut-être que je passe à coté d'un mais je ne vois pas lequel et ni pourquoi il serait différent.

    Alors je me demande s'il existe une méthode ou une technique qui me permet de savoir ce qui différencie deux objets ?

    Merci d'avance

  2. #2
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Equals() te retourne true si les deux objets sont les mêmes, c'est à dire s'il s'agit "de deux pointeurs qui pointent sur le même objet".
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    object a = new object();
    object b = new object();
    b.Equals(a); // -> false
    b = a
    b.Equals(a); // -> true
    Pour comparer tes tables tu dois probablement comparer leur contenu...

  3. #3
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Equals() te retourne true si les deux objets sont les mêmes, c'est à dire s'il s'agit "de deux pointeurs qui pointent sur le même objet".
    Oui et c'est ce qu'il me semblait dans mon cas.
    J'imagine donc (je vois pas ce que ca pourrait être d'autre a part une des deux tables nulles, mais ce n'est pas le cas) que ça ne pointe pas sur le même objet mais je ne comprends pas pourquoi puisque ça devrait être le cas.

    Si je dois comparer le contenu j'ai pas fini ...
    Et il est possible d'avoir deux tables avec le même contenu mais qui ne sont pas les "mêmes" donc c'est un coup dans l'eau à ne même pas essayer.

    Ces Table me semblent rempli de comportement bizarres.
    ( Exemple parmis d'autre, assigner un ID à une table ne provoque pas d'erreur mais quand on veut le relire ça renvoi toujours 0 ou vide )

  4. #4
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Comment tu instancie tes deux tables ?

  5. #5
    Membre éprouvé Avatar de Antho42
    Profil pro
    Inscrit en
    Février 2009
    Messages
    173
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2009
    Messages : 173
    Par défaut
    Citation Envoyé par ppphil Voir le message
    Comment tu instancie tes deux tables ?
    En fait je récupère la table actuellement sélectionnée, je l'assigne a une variable "tab" d'une classe (qui a donc un membre de type Table).
    Et un peu plus tard je récupère de nouveau la table sélectionnée et je veux la comparer avec celle préalablement stockée

    ( En écrivant ces lignes j'ai maintenant un énorme doute sur le fait que ca "pointe" au même endroit, bien que Equals() ne fasse pas toujours par rapport aux endroits pointés, par exemple avec les string )

    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
     
    Table t1 = this.Application.Selection.Tables[1];
    MaClass mclass = new MaClass();
    mclass.tab = t1;
     
    ...
     
    Table t2 = this.Application.Selection.Tables[1];
     
    if(t2.Equals(mclass.tab))
    {  
    }
    else
    {
    }

  6. #6
    Membre émérite Avatar de ppphil
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    617
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2007
    Messages : 617
    Par défaut
    Citation Envoyé par Antho42 Voir le message
    bien que Equals() ne fasse pas toujours par rapport aux endroits pointés, par exemple avec les string )
    Oui, mais avec un string ça paraît clair. C'est documenté. Par contre, le Equals du Table ne parait pas overridé en tous cas selon la documentation et il s'agirait du Equals de Object...
    Désolé, je ne me sens pas plus au clair que toi....

  7. #7
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Par défaut
    Citation Envoyé par Antho42 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Table t1 = this.Application.Selection.Tables[1];
    MaClass mclass = new MaClass();
    mclass.tab = t1;
     
    ...
     
    Table t2 = this.Application.Selection.Tables[1];
    Si this.Application.Selection est modifié, il est possible que Tables[1] ne soit plus la même instance.
    Que fais-tu avec l'instance mclass ?

Discussions similaires

  1. [Débutant] Comment comparer la valeur de deux objets (type Object)
    Par r0d dans le forum C#
    Réponses: 5
    Dernier message: 10/12/2014, 11h20
  2. [WD17] Comment savoir ce qui a été modifié par l'utilisateur ?
    Par meganulos dans le forum WinDev
    Réponses: 8
    Dernier message: 24/10/2013, 16h32
  3. Comment savoir ce qui fait crasher mon application
    Par rdeumil dans le forum Android
    Réponses: 4
    Dernier message: 03/05/2013, 16h50
  4. [CSS] Comment savoir ce qui est faisable?
    Par cladsam dans le forum Mise en page CSS
    Réponses: 13
    Dernier message: 07/02/2006, 13h06
  5. [Jawin][VB]comment savoir ce que contient un objet ?
    Par blaz dans le forum API standards et tierces
    Réponses: 15
    Dernier message: 22/08/2005, 12h27

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