Esaminando un albero di espressioni, è possibile ottenere il valore di una costante, campo di istanza e proprietà ma non una variabile locale definita in un metodo.Come accedere al valore di una variabile locale da un albero di espressioni
L'esecuzione di quanto segue genererà 1, 2, 3 (dalla costante, campo di istanza e proprietà) quindi un'eccezione poiché non so come ottenere l'istanza su cui viene dichiarato FieldInfo per chiamare GetValue () per la variabile locale.
using System;
using System.Linq.Expressions;
using System.Reflection;
namespace Example
{
class Program
{
private int _intField = 2;
static void Main()
{
new Program().Run();
Console.ReadLine();
}
private void Run()
{
IntProp = 3;
var intVariable = 4;
Test(() => 1);
Test(() => _intField);
Test(() => IntProp);
Test(() => intVariable);
}
public int IntProp { get; set; }
void Test<T>(Expression<Func<T>> func)
{
var body = func.Body;
if (body.NodeType == ExpressionType.Constant)
{
Console.WriteLine(((ConstantExpression)body).Value);
}
else
{
var memberExpression = body as MemberExpression;
var @object = memberExpression.Member.DeclaringType == GetType()
? this
: null; //Can I do anything here? Instance of the method the variable is defined in?
if (memberExpression.Member.MemberType == MemberTypes.Field)
{
Console.WriteLine(((FieldInfo)memberExpression.Member).GetValue(@object));
}
else if (memberExpression.Member.MemberType == MemberTypes.Property)
{
Console.WriteLine(((PropertyInfo)memberExpression.Member).GetValue(@object));
}
}
}
}
}
Semplicemente non si può fare questo. La variabile non esiste nemmeno se il metodo non è in esecuzione. –
Possibile duplicato di [È possibile ottenere variabili locali tramite la riflessione?] (Http://stackoverflow.com/questions/11118084/is-it-possibile-per-impostare-local-variabili- attraverso -risposta) – CarbineCoder
Cosa sono stai cercando di ottenere? Il nome del parametro? Sono un po 'confuso, ma hai sempre la possibilità di impostare una variabile' globale 'prima di invocare il metodo con qualsiasi cosa tu abbia bisogno. –