Si può enumerare la chiamata tipi di parametri metodo/informazioni come questo:metodo come enumerare passati parametri
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();
}
}
Ma esiste un modo per ottenere l'oggetto effettivo di ciascun parametro?
EDIT: Il mio obiettivo è quello di elencare tutti i parametri e ottenere i loro valori. utilizzando LINQ espressioni, si può ottenere il valore del parametro in questo modo:
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);
}
Ma quello che mi piacerebbe fare è qualcosa di simile:
foreach (fooObject o in thisMethod.GetParameterObjects())
{
object someValue = GetParameterValue(() => fooObject);
}
E in tal modo avere un metodo generico per la raccolta di tutti i parametri e i loro valori.
Si sta tentando di creare una traccia stack contenente i valori dei parametri effettivi? –
Uhm, le istanze dei parametri effettivi sono proprio lì nel metodo ... –
@Mark: anche il mio pensiero, ma visto che è ovvio che sta cercando qualcosa di più generale, qualcosa che ti permetterebbe di ottenere i valori di qualsiasi frame dello stack (Sto indovinando ...) –