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 :

Dictionnary contenant une clef de type String[]


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Stagiaire sur Sharepoint
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire sur Sharepoint
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Par défaut Dictionnary contenant une clef de type String[]
    Bonjour à tous!
    en fait je dois recréer plusieurs tables issu d'une bdd (jusqu'ici tout va bien), mais je dois aussi représenter les relations entre ces tables. Je créais un objet de type Dictionnary<String[], String[]> afin de représenter les relations entre une clef secondaire et la valeur sur lequel elle pointe. Aussi j'ai besoin de spécifier le nom de la table et le nom du champ (d'où le tableau de string)

    Mais voilà, pas moyen de retrouver ma valeur via une clef de type String[], j'ai pourtant essayé avec une clef de type String et ça marche...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //Création du dictionnaire
    fieldsRelationship = new Dictionnary<String[], String[]>
    String[] key1 = new String[2]{"DefinitionLanguage", "IdentifiantLanguage"};
    String[] value1 = new String[2]{"Language", "IDLanguage"};
    fieldsRelationship.add (key1, value1);
     
    //Création d'un objet pour chercher la clef
    String[] key = new String[2]{"DefinitionLanguage", "IdentifiantLanguage"};
     
    //Vérification de l’existence de la clef dans la table
    if (fieldsRelationship.ContainsKey(potentialKey))
          //TODO opérations.....
    Mais ça ne trouve jamais la clef, sauf s'il s'agit d'une clef de type String. En plus l'espion de VS2010 m'indique bien que potentialKey et key1 sont exactement pareil.

    Il y aurait-il des limites concernant les clefs d'un Dictionnary?

    Merci!

  2. #2
    Expert confirmé Avatar de Graffito
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    5 993
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 993
    Par défaut
    Bonjour,

    La comparaison de 2 string[] se fait sur l'adresse du tableau et non sur les string que contient le tableau, d'où le problème.

    Tu peux contourner le problème en utilisant une clé string (au lieu de string[]) qui contiendra la concaténation des 2 strings du tableau :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String key1 = "DefinitionLanguage"+"."+"IdentifiantLanguage" ;

  3. #3
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut,
    Avant de répondre à la question portant sur l'utilisation d'un string[] en tant que clef de dictionnaire je vais revenir sur ta description du besoin.
    Tu dis vouloir recréer des tables issues de base de données et leurs relations.
    Pourquoi ne pas utiliser la panoplie d'objets qui servent à ça : DataTable, DataView, DataColumn, DataRow, DataRelation ?

    Sinon, si tu veux une clef composée il est préférable de faire un objet dédié à ça :
    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
     
    public class ClefDouble
    	: IComparable<ClefDouble>
    {
    	public string PartieA { get; set; }
    	public string PartieB { get; set; }
    	public int CompareTo(ClefDouble other)
    	{
    		int r = string.Compare(PartieA, other.PartieA);
    		if (r == 0) r = string.Compare(PartieB, other.PartieB);
    		return r;
    	}
    }
     
    Dictionary<ClefDouble, String[]> fieldsRelationship = new Dictionary<ClefDouble, String[]>();
    String[] value1 = new String[2]{"Language", "IDLanguage"};
    fieldsRelationship.Add(new ClefDouble{ PartieA = "DefinitionLanguage", PartieB = "IdentifiantLanguage"}, value1);
    Et si tu ne veux pas t'embêter à créer ton type, tu peux utiliser un tuple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dictionary<Tuple<string, string>, String[]> fieldsRelationship = new Dictionary<Tuple<string, string>, String[]>();
    String[] value1 = new String[2]{"Language", "IDLanguage"};
    fieldsRelationship.Add(new Tuple<string, string>("DefinitionLanguage", "IdentifiantLanguage"), value1);

  4. #4
    Membre averti
    Homme Profil pro
    Stagiaire sur Sharepoint
    Inscrit en
    Octobre 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Stagiaire sur Sharepoint
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 10
    Par défaut
    OK merci à vous !
    En effet j'ai utilisé les DataSet, mais je suis complétement passé à côté de l'objet DataRelation...
    D'ailleurs merci aussi pour l'info sur la concaténation pour définir une clef.

    Première fois que je m'inscrit sur un forum et je regrette pas
    Bye!


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

Discussions similaires

  1. Des " dans une variable de type String
    Par 4lkaline dans le forum Langage
    Réponses: 6
    Dernier message: 06/11/2006, 14h20
  2. convertir une variable de type String en Number
    Par lilbrother974 dans le forum Flash
    Réponses: 13
    Dernier message: 06/09/2006, 08h28
  3. [VB]probleme double quote dans une ressource de type string
    Par JulienCEA dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 23/02/2006, 12h38
  4. Ajouter a une variable de type string, un entier
    Par Little-Freud dans le forum SL & STL
    Réponses: 12
    Dernier message: 05/03/2005, 19h33
  5. Convertir une date en type string
    Par ziboux dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/10/2003, 10h52

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