Я создал реализацию ExpressionVisitor, которая переопределяет VisitConstant. Однако когда я создаю выражение, использующее локальную переменную, мне кажется, что я не могу получить фактическое значение переменной.
public class Person
{
public string FirstName { get; set; }
}
string name = "Michael";
Expression<Func<Person, object>> exp = p => p.FirstName == name;
Как я могу получить значение переменной name из ConstantExpression? Единственное, что я могу придумать, это следующее:
string fieldValue = value.GetType().GetFields().First().GetValue(value).ToString();
Очевидно, что это не очень гибко…
Несколько более сложный пример:
Person localPerson = new Person { FirstName = "Michael" };
Expression<Func<Person, object>> exp = p => p.FirstName == localPerson.FirstName;