Bonjour,
J'aimerai savoir si il existe un methode simple pour lister les parametres à l'interieur d'une fonction. Exemple :
MerciCode:
1
2
3
4
5 void MyFunc( int foo, string bar ) { foreach( object param in params? ) { ... } }
Version imprimable
Bonjour,
J'aimerai savoir si il existe un methode simple pour lister les parametres à l'interieur d'une fonction. Exemple :
MerciCode:
1
2
3
4
5 void MyFunc( int foo, string bar ) { foreach( object param in params? ) { ... } }
Tu peux obtenir les paramètres d'une méthode en faisant :
Et tu obtiens des ParameterInfo.Code:
1
2
3 MethodInfo methodInfo = this.GetType().GetMethod("MaMethod"); methodInfo.GetParameters();
En explorant la System.Reflection, tu trouveras ce qu'il te faut.
Merci pour la rapidité de ta reponse. Le nouveau probleme est de retrouver la valeur du parametre
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 public class Toto { public void Function(int a, string b) { MethodInfo minfo = typeof(Toto).GetMethod("Function"); ParameterInfo[] pi = minfo.GetParameters(); foreach (ParameterInfo item in pi) { Debug.Print(item.Name + " " + item.DefaultValue?); } } }
Tu ne trouveras effectivement pas la valeur via ParameterInfo. Peut-être y a-t-il un moyen via StackTrace. Je n'ai pas la réponse, si j'ai le temps j'essaierai de trouver une solution...
Pas beaucoup d'espoir... (voir ici)
D'apres ce forum il ne serait possible de faire cela que dans le .Net 3.0
http://forums.microsoft.com/MSDN/Sho...44800&SiteID=1
j'ai une question...
Quelle est la finalité, car les paramètres d'appel dans la fonction... mine de rien tu les connais c'est toi qui les a définis...
la seule raison que je vois à cela serait d'avoir un nombre de paramètres variable comme le permet Console.WriteLine() par exemple.
Dans ce cas l'écriture de ton profil est
typeRetour MaFonction(int foo, params object[] list)
ici foo est un paramètre obligatoire.
list récupère sous forme d'un array d'object les différents paramètres fournis à la fonction.
Il n'est pas difficile sur chacun d'obtenir son type s'il la référence n'est pas nulle.
=> monObjet.GetType()
Donc pour information j'aimerai rajouter du Log dans mon application. Par exemple lister tout les appels de fonctions et afficher la valeur des arguments.
Code:
1
2
3
4
5
6
7 void MyFunc( int foo, string bar ) { Log(); //Ceci ajouterai une ligne en automatique //A la place de : Log.WriteLine( string.format("Class::MyFunc(int foo={0}, string bar={1})", foo, bar ); ... }
Avec la réflexion c'est normal que tu ne puisses pas récupérer les valeurs des paramètres, c'est comme si tu créais, en quelque sorte, une nouvelle "instance"...
Le seule idée que j'ai, serait de créer "manuellement" un tableau d'objet... je ne pense pas que tu pourras trouver mieux... mais au cas où ça m'intéresse ^^
Je n'ai jeté qu'un coup d'oeil rapide et certains membres de ce même forum le connaissent bien mieux que moi, mais l'outil PostSharp permet (entre autres choses) peut être de faire ce que tu veux.
Je ne sais pas si tu as jeté un coup d'œil suite au message de Guulh, mais je te confirme qu'avec PostSharp tu peux faire exactement ce que tu veux.