On peut énumérer les appelés types de paramètres de la méthode/informations comme ceci:comment énumèrent passé paramètres méthode
private void SomeMethod(int thisValue, string thatValue)
{
StackTrace stackTrace = new StackTrace();
foreach (ParameterInfo pInfo in stackTrace.GetFrame(0).GetMethod().GetParameters())
{
string name = pInfo.Name;
string type = pInfo.GetType().ToString();
}
}
Mais est-il possible d'obtenir l'objet réel de chaque paramètre?
EDIT: Mon but est d'énumérer tous les paramètres et d'obtenir leurs valeurs. LINQ expressions, on peut obtenir la valeur du paramètre comme ceci:
private void SomeMethod(int thisValue, string thatValue)
{
object valueOfThis = GetParameterValue(() => thisValue);
object valueOfThat = GetParameterValue(() => thatValue);
}
private object GetParameterValue<T>(Expression<Func<T>> expr)
{
var body = ((MemberExpression)expr.Body);
return ((FieldInfo)body.Member).GetValue(((ConstantExpression)body.Expression).Value);
}
Mais ce que je voudrais faire est quelque chose comme:
foreach (fooObject o in thisMethod.GetParameterObjects())
{
object someValue = GetParameterValue(() => fooObject);
}
et ont ainsi une méthode générique pour la collecte de tous les paramètres et leurs valeurs.
Essayez-vous de créer une trace de pile contenant les valeurs de paramètre réelles? –
Uhm, les instances de paramètres réelles sont là dans la méthode ... –
@Mark: ma pensée aussi, mais voyant qu'il est évident qu'il cherche quelque chose de plus général, quelque chose qui vous permettrait d'obtenir les valeurs de n'importe quelle trame de pile (Je devine ...) –