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

Windows Forms Discussion :

[c#] indirection et string


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Points : 111
    Points
    111
    Par défaut [c#] indirection et string
    Bonjour,

    je voudrais faire un accesseur générique qui me permetrais d'accéder au valeur des membres de ma classe en passant leur nom en paramétre.

    voici ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public ma_classe
    {
     private param1;
     private param2;
    ....
     public ma_classe()
     {
       param1=0;
       param2=a;
     }
    };
    en fait je voudrais en utilisant une fonction du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    public object ma_fountion(string mon_membre)
    {
     return this.(valueof(mon_membre)); // je sais bien que le valueof n'existe pas ;)
    }
    et qu'elle me retourne la valeur de mon membre. Le problème est que je n'arrive pas à récupérer la valeur contenu dans la chaine.

    en gros je voudrais que si je tappe ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ma_function("param1");
    je récupére 0.

  2. #2
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    faut utiliser la réflexion

  3. #3
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Points : 111
    Points
    111
    Par défaut
    Ok merci mais pourrais tu m'en dire un peu plus stp. Je suis développeur C++ et je me mets au c# pour aider un ami donc j'y connais pas grand chose.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 43
    Points : 41
    Points
    41
    Par défaut
    je débute aussi en csharp mais je dirai "en methode cuisine":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public class ma_classe
    {
       static public int param1=1;
       static public string param2="a";
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public object ma_fountion(string mon_membre)
    {
        if (mon_membre.CompareTo("param1") == 0)
            return ma_classe.param1;
        if (mon_membre.CompareTo("param2") == 0)
            return ma_classe.param2;
        return "pas trouver";
    }
    Console.WriteLine(ma_fountion("param1"));

    Mais bon je pense qu'il y a des methode plus évolué ... surtout si tu as 50 parametre a traiter...

    Mouais peut etre essayer de parcourrir touts les objets de ta class avec un foreach tu fait un tostring() avec le compareto et tu return ma_classe.objet mais je ne sais pas du tout utiliser les foreach...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    57
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 57
    Points : 57
    Points
    57
    Par défaut
    Le problème qui risque de poser, c'est le type de l'objet en retour

    Sinon, tu peux rechercher du côté d'InvokeMember (remplacer item par this)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // on ajoute tout en vrac avec la reflexion
    Assembly moi = Assembly.GetAssembly(item.ItemAttributes.GetType());
    Type type = moi.GetType( "ItemAttributes" );
     
    foreach (MemberInfo inf in type.GetMembers()) {
        if (inf.MemberType == MemberTypes.Property) {
    // pour avoir le type 
                sr = item.ItemAttributes.GetType().InvokeMember(inf.Name, BindingFlags.GetProperty, null, item.ItemAttributes, null).GetType().ToString();
    // pour avoir la valeur (si c'est String ici)
                                String result = "";
                                result = item.ItemAttributes.GetType().InvokeMember(inf.Name, BindingFlags.GetProperty, null, item.ItemAttributes, null).ToString(); //, null, result, null);

  6. #6
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    213
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 213
    Points : 111
    Points
    111
    Par défaut
    merci de vos réponses je vais tester.

Discussions similaires

  1. éliminer un caractere d'un string
    Par no-vice dans le forum Langage
    Réponses: 5
    Dernier message: 09/08/2002, 14h55
  2. String -> long double (_strlold ?)
    Par haypo dans le forum C
    Réponses: 7
    Dernier message: 25/07/2002, 20h22
  3. URGENT: retour de string
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 15/07/2002, 09h47
  4. Réponses: 2
    Dernier message: 05/06/2002, 12h29
  5. String Grid et choix d'une couleur pour une ligne
    Par Gigottine dans le forum C++Builder
    Réponses: 12
    Dernier message: 17/05/2002, 15h23

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