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 :

[C# 2.0]Comment gérer un tableau d'objet static key/value?


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut [C# 2.0]Comment gérer un tableau d'objet static key/value?
    Bonjour

    je suis dans une classe static.
    Dans cette classe je dois declarer un objet static qui me fournirait un ensemble d'objet key/value.

    exemple :
    mon objet tableau aurait a l'interieur
    1 - Nord
    2 - Sud
    3 - Est
    ...


    l'ensemble de mes clés et de mes valeurs sont défini en constante dans ma classe static
    private const string LIBNORD = "Nord";
    private const int KEYNORD = 1;


    comment faire cela ?

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    J'espère ne pas trop devier de ton besoin mais une enum serait peut être plus simple d'utilisation pour toi dans le cas de figure que tu decris :
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Membre habitué Avatar de del-dongo
    Inscrit en
    Mai 2003
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 147
    Points : 183
    Points
    183
    Par défaut
    sinon pour la mise en oeuvre ce serait un truc comme ca...
    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
     
    public static class Class2
    	{
    		public const string LIBNORD = "Nord";
    		public const int KEYNORD = 1; 
    		private static Hashtable Orientations = new Hashtable();
     
    		public static void Register( int id, string lib)
    		{
    			Class2.Orientations.Add( id, lib );
    		}
     
    		public static string GetValue(int id)
    		{
    			if (Class2.Orientations.ContainsKey( id ))
    				return Class2.Orientations[id].ToString();
    			else
    				return String.Empty;
    		}
     
    	}

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par neguib
    J'espère ne pas trop devier de ton besoin mais une enum serait peut être plus simple d'utilisation pour toi dans le cas de figure que tu decris :
    bah en fait j'y avais penser mais j'ai absolument d'une key qui est un integer
    sans rentrer dans le détails, j'appelle la methode overridé preprocessmessage avec en paramètre un Id.

    ensuite dans ma classe statique j'affiche un message selon les Ids.
    Je suis obligé de passer par cette methode par contre ...


    sinon pour répondre a del-dongo,
    cela me va sauf que jaimerai ne pas passer par ta méthode Register
    jaimerai deja avoir mes elements dans mon hashtable a la declaration de l'objet hastable.. c'est possible ?

  5. #5
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Citation Envoyé par chnew
    Citation Envoyé par neguib
    J'espère ne pas trop devier de ton besoin mais une enum serait peut être plus simple d'utilisation pour toi dans le cas de figure que tu decris :
    bah en fait j'y avais penser mais j'ai absolument d'une key qui est un integer
    sans rentrer dans le détails, j'appelle la methode overridé preprocessmessage avec en paramètre un Id.
    ensuite dans ma classe statique j'affiche un message selon les Ids.
    Je suis obligé de passer par cette methode par contre ...
    ..
    Je vais me permettre tout de même d'insister car la valeur dans une Enum peut être un Int32
    Donc par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public enum Cardinaux
    {
        Nord = 1;
        Sud = 2;
        Est = 3;
        Ouest = 4;
    }
    Ensuite les membres static de la Classe Enum, te permetront de jongler entre les valeurs ou les noms de l'Enum ainsi que le simple transtypage en (int), il me semble.

    De plus si tu as besoin de combiner les valeurs Nord-Est par exemple, tu as la possibilité d'ajouter un FlagsAttribute en assignant les valeurs Int32 judicieusement.

    Enfin pour moi si tu connais le nombre exact des valeurs utilisées et qu'il est petit; je prefèrerai une Enum à une HashTable.
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  6. #6
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    oui je vais essayer ta méthode neguib...
    par contre je dois aussi faire a peu pres le meme type mais au lieu d'avoir des trucs assez simple genre NORD SUD etc
    la j'ai des identifiants integer et ensuite carrement une phrase

    comment je fais la avec des enums ?

  7. #7
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    Non effectivement pas d'enum dans ce cas

    Tu peux aussi définir tes valeurs de la façon suivante il me semble
    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 MyStaticValues
    {
       private static readonly DictionaryEntry value1 = new DictionaryEntry(1,"je suis la valeur 1");
       private static readonly DictionaryEntry value2 = new DictionaryEntry(2,"je suis la valeur 2");
       private static readonly DictionaryEntry value3 = new DictionaryEntry(3,"je suis la valeur 3");
       //...
     
       public static Hashtable GetValues()
       {
          Hashtable ht = new Hashtable();
          ht.Add(value1.Key, value1.Value);
          ht.Add(value2.Key, value2.Value);
          ht.Add(value3.Key, value3.Value);
          return ht;
       }
    }
    Pour le reste il suffit d'utiliser les fonctionnalités de Hashtable
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 652
    Points : 730
    Points
    730
    Par défaut
    Version HashTable statique 'simple' :
    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
    public class MyStaticValues
    {
      private const string LIBNORD = "Nord";
      private const int KEYNORD = 1; 
      ...
      private static readonly Hashtable _values;
     
      public static Hashtable Values { get { return _values; } }
     
      static MyStaticValues()
      {
        _values = new Hashtable();
        _values.Add( KEYNORD, LIBNORD );
        ...
      }
    }
    Utilisé avec (string)MyStaticValues.Values[1], etc.
    Lourd, pas sûr, pas pratique, mais simple (à faire).

    Version un peu plus 'classe' :
    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
    public struct CardinalPoint
    {
    	public static CardinalPoint North = new CardinalPoint( 1, "Nord" );
    	public static CardinalPoint South = new CardinalPoint( 2, "Sud" );
    	public static CardinalPoint East = new CardinalPoint( 3, "Est" );
    	public static CardinalPoint West = new CardinalPoint( 4, "Ouest" );
     
    	private readonly int _id;
    	private readonly string _name;
     
    	public int Id
    	{
    		get { return this._id; }
    	}
     
    	public string Name
    	{
    		get { return this._name; }
    	}
     
    	private CardinalPoint( int id, string name )
    	{
    		_id = id;
    		_name = name;
    	}
    }
    et utilisé avec CardinalPoint.North, ...
    Ça fait un peu comme les enum, mais avec ce qu'on veut derrière, et on est sûr de ne pas pouvoir faire n'importe quoi avec.
    Be wary of strong drink.
    It can make you shoot at tax collectors, and miss.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 100
    Points : 93
    Points
    93
    Par défaut
    Moi je ferais un truc comme çà (inspiré de Maniak):

    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
     
        public class Cardinaux
        {
            private const string LIBNORD = "Nord";
            private const int KEYNORD = 1; 
            ..
     
            private static readonly Hashtable _values = new Hashtable();
     
            public static string GetValue(object key)
            { 
                if(_values.Count == 0)
                {
                    _values.Add( KEYNORD, LIBNORD );
                    ..
                }
                return (string)_values[key]; 
            }
        }
    utilisable Cardinaux.GetValue(1)..

  10. #10
    Membre régulier
    Inscrit en
    Décembre 2003
    Messages
    160
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 160
    Points : 92
    Points
    92
    Par défaut
    Merci tout le monde
    je vais faire un mix de tout ca ...
    en tout cas, bien de bonnes idées ...

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

Discussions similaires

  1. [WD15] Comment gérer le nom d'un tableau en variable?
    Par pardet dans le forum WinDev
    Réponses: 2
    Dernier message: 15/06/2012, 14h46
  2. Comment gérer l'affichage d'une reponse ajax dans un tableau de tableau(html)
    Par satanluimm dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/03/2012, 15h14
  3. Comment classer un tableau d'objet ?
    Par sql_ignorant dans le forum Langage
    Réponses: 2
    Dernier message: 22/09/2009, 20h34
  4. Réponses: 1
    Dernier message: 19/04/2007, 04h16
  5. Réponses: 5
    Dernier message: 13/06/2006, 11h08

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