2010-12-16 4 views
1

J'ai une application C# .net 2.0CF où je voudrais obtenir non seulement le type et la valeur d'un paramètre passé à la fonction, mais aussi le nom de la variable.en utilisant la réflexion pour obtenir le nom d'un paramètre

Par exemple:

void Show<PARAM>(PARAM p) 
{ 
    Debug.WriteLine(string.Format("{0} {1} = {2}", typeof(PARAM).ToString, ???, p.ToString()); 
} 

bool foo = true; 
Show(foo); 

génèrerait "bool foo = true";

En C++, je peux le faire avec la macro pré-processeur ##.

Si cela ne peut pas être fait en 2.0, peut-il être fait en 3.5 ou 4.0?

Merci, PaulH

+0

http://stackoverflow.com/questions/755254/getting-the-name-of-the-parameter-passed-into-a-method – grenade

+2

astuce pour ce faire (je pense que C# 3.0 serait nécessaire): http://stackoverflow.com/questions/869610/c-resolving-a-parameter-name-at-runtime – Jake

Répondre

1

Si je me souviens bien, ce n'est pas possible avec la réflexion comme noms de variables ne sont pas dans les assemblées, et p est un nom de variable.

0
using System.Reflection; 


ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters(); 
System.Diagnostics.StackTrace trace = new System.Diagnostics.StackTrace(false); 
System.Diagnostics.StackFrame[] frames = trace.GetFrames(); 

Je suppose que la valeur peut être récupérée à partir des trames de la pile.

Le nom paramter se trouve de la

ParameterInfo [] info = MethodInfo.GetCurrentMethod() GetParameters().

+0

StackTrace et StackFrame ne sont pas disponibles dans Compact Framework. – PaulH

+0

aussi, ce n'est pas vrai. 'StackFrame' contient seulement le fichier, la ligne et la colonne et le' MethodBase'. Aucun ne contient les noms de paramètres d'origine. – Femaref

0
public void Show(int value) 
    { 
     ParameterInfo[] info = MethodInfo.GetCurrentMethod().GetParameters(); 
     Trace.WriteLine(string.Format("{0} {1}={2}", info[0].ParameterType.ToString(), info[0].Name, value.ToString())); 
    } 

sortie

valeur System.Int32 = 10

+0

Malheureusement, le CF n'a pas de MethodInfo.GetCurrentMethod(). – PaulH

+0

Essayez d'utiliser PostSharp il a le support de Compact Framework. –

0

Essayez d'utiliser PostSharp il a le soutien pour Compact Framework.

Questions connexes