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

VB.NET Discussion :

Conversion d'argument d'une fonction en hashtable


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut Conversion d'argument d'une fonction en hashtable
    Bonjour à tous,
    Je cherche à convertir les paramètres d'une fonction pour les convertir en un hastable contenant le nom de la variable en key et sa valeur en value.
    J'ai trouvé comment récupérer le nom des paramètres avec la class parameterinfo, mais je n'ai pas de trouver une méthode pour récupérer la valeur de cette variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        Function test(ByVal param1 As String, ByVal param2 As String) As Hashtable
            Dim hash As Hashtable = New Hashtable
            Dim stFrame As New StackFrame
            Dim currentMethod As System.Reflection.MethodBase = stFrame.GetMethod()
            Dim currentParameters() As System.Reflection.ParameterInfo = currentMethod.GetParameters()
            For Each param As System.Reflection.ParameterInfo In currentParameters
                hash.Add(param.Name, "valeur of param ?") 'Comment spécifier la valeur résultante ?)
            Next
            Return hash
        End Function
        Sub Main()
            Dim myhash As Hashtable = New Hashtable
            myhash = test("value1", "value2")
    End sub
    Je souhaiterais donc avoir dans myhash
    key / value
    param1 / value1
    param2 / value2

    Cela semble pourtant être tout bête...
    Ce qu'il me manque, ce serait comme pour faire en powershell un get-variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $var1="value1"
    $var2="value2"
    $nomvar="var1"
    Get-Variable $nomvar
     
    Name                           Value
    ----                           -----
    var1                           value1
    Merci

  2. #2
    Membre Expert
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Par défaut
    Bonjour,

    Essaie peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     hash.Add(param.Name, param.DefaultValue)
    , ce qui récupérera les valeurs par défaut des paramètres

    Sinon,je ne pense pas que tu puisses faire ce que tu veux, car il faudrait pouboir arrêter le programme à l'intérieur de la fonction,pour examiner les paramètres passés par l'utilisateur...

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    merci pour ta réponse.
    malheureusement, ce n'est pas la valeur par défaut que je veux récupérer, mais la valeur actuelle.
    En fait, je voudrais l'équivalent à cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        Function test(ByVal param1 As String, ByVal param2 As String) As Hashtable
            Dim hash As Hashtable = New Hashtable
            Dim stFrame As New StackFrame
            Dim currentMethod As System.Reflection.MethodBase = stFrame.GetMethod()
            Dim currentParameters() As System.Reflection.ParameterInfo = currentMethod.GetParameters()
            hash.Add(currentParameters(0).Name, param1)
            hash.Add(currentParameters(1).Name, param2)
            'hash.Add(param.Name, param1)
            'For Each param As System.Reflection.ParameterInfo In currentParameters
            '    hash.Add(param.Name, "valeur of param ?") 'Comment spécifier la valeur résultante ?)
            'Next
            Return hash
        End Function
    mais faire une fonction plus générique sans spécifier param1 et param2 dans "hash.Add(currentParameters(0).Name, param1)". Avec polymorphisme de la fonction, cela éviterait de toucher le code pour chaque fonction.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Déjà pourquoi utiliser une Hashtable ? (à moins que tu sois en framework 1.1 mais j'en doute fortement) plutôt qi'une List ou Collection ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 5
    Par défaut
    une list ou une collection, pourquoi pas. J'ai choisi une hashtable car cela me permettait d'avoir une paire cle/valeur.
    Mais mon problème resterait cependant le même.

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    De toute manière, ton problème n'est pas soluble avec cette voie : en effet, la seule chose que tu peux obtenir c'est des informations sur les méthodes, pas sur leur exécution dans une instance donnée.

    Vois plutôt du coté de l'injection de code, ou de l'AOP; éventuellement en utilisant un tisseur Aspect du type PostSharp. (ou autre, mais PostSharp est gratuit).

Discussions similaires

  1. [VBA-E] Lister les arguments d'une fonction
    Par laloune dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2006, 12h04
  2. Récupération d'arguments sur une fonction
    Par p0Kep0K dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/09/2005, 09h17
  3. premier argument d'une fonction
    Par Ickou dans le forum Langage
    Réponses: 3
    Dernier message: 10/09/2005, 14h17
  4. une url comme argument d'une fonction
    Par khayyam90 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 18/10/2004, 20h15
  5. passer FILE* en argument d une fonction
    Par Monsieur_Manu dans le forum C
    Réponses: 9
    Dernier message: 10/04/2003, 17h56

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