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 :

InvalidOperationException - HashTable - Impossible de comparer deux éléments dans ..


Sujet :

C#

  1. #1
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut InvalidOperationException - HashTable - Impossible de comparer deux éléments dans ..
    Bonjour,

    Je suis devant un problème que je ne comprends pas. J'ai une exception de type System.InvalidOperationException qui est levée lorsque j'appelle la méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Hashtable.ConstainKey(key);
    Le message de l'exception est le suivant :
    L'exception System.InvalidOperationException n'a pas été gérée
    Impossible de comparer deux éléments dans le tableau.
    Est-ce que quelqu'un peut m'aider? Je n'ai rien trouvé sur le web...

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    à mon avis c'est parce que le type de la clé que tu utilises n'implémente pas IComparable...

  3. #3
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Merci pour ta réponse, mais c'est du string...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    alors là je suis perplexe...
    et si tu remplaces Hashtable par Dictionary<string, object> ?

  5. #5
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    C'est bizarre tout ça car le code suivant fonctionne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    System.Collections.Hashtable hash = new System.Collections.Hashtable();
    hash.Add("key1", "valeur1");
    hash.Add("key2", "valeur2");
    hash.Add("key3", "valeur3");
    if (hash.ContainsKey("key3"))
    {
        Console.WriteLine("key3 existe");
    }
    else
    {
        Console.WriteLine("key3 n'existe pas");
    }

  6. #6
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Ca compile, le problème, c'est que ce bug apparaît rarement. Je vais tenter de tester ça, mais je doute que ça ne change quelque chose.

    Peut-être une information utile, je travaille avec une application multi-thread, et l'exception est chaque fois levée depuis un événement lancé depuis un autre thread que le propriétaire de la Hashtable. Ca peut peut-être changer qqch...

  7. #7
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Oui en effet, ma méthode fonctionne, mais l'exception n'arrive pas tout le temps. Plutôt rarement même...

  8. #8
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Il n'y a pas une message plus précis dans la propriété InnerException de ton objet exception ?

  9. #9
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    L'erreur survient elle lorsque la chaîne est null ? Me semble que les IDctionary refusent les clés nulles.

  10. #10
    Rédacteur

    Avatar de Jérôme Lambert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2003
    Messages
    4 451
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 4 451
    Par défaut
    Citation Envoyé par Guulh Voir le message
    L'erreur survient elle lorsque la chaîne est null ? Me semble que les IDctionary refusent les clés nulles.
    L'erreur ne vient pas de là au vue de ce qu'on peut lire dans MSDN. Il n'y a que ArgumentNullException qui peut être renvoyé comme exception lors de l'utilisation de ContainsKey.

    http://msdn2.microsoft.com/en-us/lib...ntainskey.aspx

  11. #11
    Membre éclairé Avatar de stephane.julien
    Inscrit en
    Septembre 2007
    Messages
    342
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Septembre 2007
    Messages : 342
    Par défaut
    Merci de votre aide et de vos réponses !

    Citation Envoyé par Cardi Voir le message
    Il n'y a pas une message plus précis dans la propriété InnerException de ton objet exception ?
    Non malheureusement, quand je suis en mode debugger, Je n'arrive rien à voir d'autre que :
    L'exception System.InvalidOperationException n'a pas été gérée
    Impossible de comparer deux éléments dans le tableau.
    Je peux aussi voir la pile d'appel :
    Depuis un thread, un événement est levé, qui appelle une méthode. Dans cette méthode, je lève un autre événement qui va accéder à la méthode qui lance l'exception. La méthode qui lance l'exception contient le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
        public Value GetValue(string _sName)
        {
          if (hValues.ContainsKey(_sName))
            return (Value)hValues[_sName];
          else
            return null;
        }
    Finalement, je crois que le plus simple est de transformer le code de ma méthode pour le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public Value GetValue(string _sName)
        {
          try
          {
            if (hValues.ContainsKey(_sName))
              return (Value)hValues[_sName];
            else
              return null;
          }
          catch(InvalidOperationException) { return null; }
        }
    Ce qui m'embête, c'est que je ne comprends pas pourquoi cette erreur est levée. Ca résout mon bug, mais ça ne m'explique pas le pourquoi du comment...

Discussions similaires

  1. [AC-2003] Comparer deux champs dans une table et remplir un autre champ
    Par frexville dans le forum VBA Access
    Réponses: 3
    Dernier message: 07/09/2009, 12h52
  2. Comparer deux dates dans un validation.xml
    Par benoit31 dans le forum Struts 1
    Réponses: 2
    Dernier message: 03/07/2008, 16h16
  3. sauvgarder deux éléments dans le meme index
    Par ralf91 dans le forum C#
    Réponses: 5
    Dernier message: 03/04/2008, 19h38
  4. comparer deux date dans une requete select simple
    Par isac83 dans le forum Requêtes
    Réponses: 1
    Dernier message: 23/09/2007, 09h53
  5. Comparer deux BLOB dans un trigger ?
    Par souch dans le forum PL/SQL
    Réponses: 3
    Dernier message: 28/07/2007, 00h25

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