yzru
Messages postés6Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention 3 mai 2007
-
3 mai 2007 à 11:46
yzru
Messages postés6Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention 3 mai 2007
-
3 mai 2007 à 18:24
Une petite colle sur une fonction que je cherche …
Public void mafonction(int a,string b)
{
object[] o = GetCurrentParameters();
// o[0] == a
// o[1] == b
}
Est-ce que vous savez comment réaliser cette fonction GetCurrentParameters() ?
La Reflection ne permet d'obtenir que leur noms leurs types, mais pas leur valeurs …
leprov
Messages postés1160Date d'inscriptionvendredi 23 juillet 2004StatutMembreDernière intervention21 octobre 201017 3 mai 2007 à 16:00
ca me semble difficillement réalisable (je vois rien dans la reflexion pour ca)...
En fait, disons que pour récupérer les valeurs des paramètres d'une méthode il faudrait une "instance de cette méthode" ce qui n'a pas tellement de sens....
Une solution qui me vient comme ca (folklorique et lourd pour pas grand chose a mon avis) pourrait être reflexion+code dom :
générer le code de l'appel a la méthode à la volée....
Enfin cest une sacré moulinette bien lourde pour juste une question de flemme de codage....mais juste par réflexion....bah a moins de pouvoir taper directement dans la stack et voir tout ce qui a été push en tant que paramètre de la méthode je vois pas
cs_Bidou
Messages postés5487Date d'inscriptiondimanche 4 août 2002StatutMembreDernière intervention20 juin 201361 3 mai 2007 à 13:35
Euh, peut-être récupérer des informations sur la méthode? le nom des variables? leurs type?
Si c'est ça, regarde du côté de Reflection et de MethodInfo...
yzru
Messages postés6Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention 3 mai 2007 3 mai 2007 à 13:59
En fait mon but est que la fonction s'appelle elle-même dans un autre thread et ca marche très bien en créant un tableau d'objets initialisé avec la liste des paramètres.
Ici, m_ThreadInvoker est un objet que j'ai contruit qui permet de sérialiser les appels et de les exécuter dans un thread à part.
Public void mafonction(int a,string b)
{
object[] parameters = new object[] {a,b};
m_ThreadInvoker.Invoke(MethodInfo.GetCurrentMethod(),this,parameters);
}
L'objectif est de ne pas avoir à écrire
object[] parameters = new object[] {a,b};
car j'ai beaucoup de méthodes à modifier et il faut donc que j'adapte le code à chacune des méthodes, ce qui est source d'erreur alors qu'un code générique m'éviterait tout problème, d'où le besoin de le remplacer par :
object[] parameters = GetCurrentParameters();
yzru
Messages postés6Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention 3 mai 2007 3 mai 2007 à 14:06
Un ajout pour ceux que ca dérangerait :
Public void mafonction(int a,string b)
{
if(Thread.CurrentThread != m_ThreadInvoker.Thread)
{
object[] parameters = new object[] {a,b};
m_ThreadInvoker.Invoke(MethodInfo.GetCurrentMethod(),this,parameters);
return;
}
// code de la fonction ...
}
yzru
Messages postés6Date d'inscriptionjeudi 27 février 2003StatutMembreDernière intervention 3 mai 2007 3 mai 2007 à 14:49
cette solution n'est pas celle que je recherche car cela m'obligerait à réécrire les signatures de toutes mes méthodes, mais elle me permettrait bien d'obtenir un tableau de mes paramètres.