Badając drzewo wyrażeń, można uzyskać wartość stałej, pole instancji i właściwość, ale nie zmienną lokalną zdefiniowaną w metodzie.Jak uzyskać dostęp do wartości zmiennej lokalnej z drzewa wyrażeń
Wykonanie następujących czynności spowoduje wyprowadzenie 1, 2, 3 (ze stałej, pola instancji i właściwości), a następnie wyjątku, ponieważ nie wiem, jak uzyskać instancję, w której deklarowana jest FieldInfo w celu wywołania GetValue () dla zmiennej lokalnej.
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));
}
}
}
}
}
Po prostu nie mogę tego zrobić. Zmienna nie istnieje, chyba że metoda faktycznie działa. –
Możliwy duplikat [Czy możliwe jest uzyskanie lokalnych zmiennych za pomocą odbicia?] (Http://stackoverflow.com/questions/11118084/jest-pozwoli-do-get-local-zmiennych-przez-odbrojeniem) – CarbineCoder
Co to jest? próbujesz dostać? Nazwa parametru? Jestem nieco zdezorientowany, ale zawsze masz możliwość ustawienia zmiennej "globalnej" przed wywołaniem metody z czymkolwiek, czego potrzebujesz. –