Как получить значение выражения - PullRequest
1 голос
/ 10 августа 2011

У меня есть эта функция, которая использует выражения Linq:

private Expression GetFieldValueExpression(ParameterExpression parameter, string fieldName)
{
  Expression properyIndexExpression = System.Linq.Expressions.Expression.Constant (fieldName, typeof(string));
  IndexExpression fieldValueExpression = System.Linq.Expressions.Expression.Property(parameter, "Item", new Expression[] { properyIndexExpression });
  return Expression.Property(fieldValueExpression, "Value");
}

Значение, возвращаемое Expression.Property(fieldValueExpression, "Value"), имеет тип string.

Я не знаю, как его получить.Я знаю, что должен создать лямбду и скомпилировать ее, но я не знаю как.

Спасибо, что уделили время.

1 Ответ

3 голосов
/ 10 августа 2011

Возможно, вы ищете такой код:

    public void EvaluateAnExpression()
    {
        //Make the parameter
        var parm = Expression.Parameter(typeof(TestClass),"parm");

        //Use your method to build the expression
        var exp = GetFieldValueExpression(parm, "testField");

        //Build a lambda for the expression
        var lambda = Expression.Lambda(exp, parm);

        //Compile the lamda and cast the result to a Func<>
        var compiled = (Func<TestClass, string>)lambda.Compile();

        //We'll make up some object to test on
        var obj = new TestClass();

        //Get the result (it will be TESTFIELD)
        var result = compiled(obj);
    }

этот код принимает некоторые тестовые классы, которые выглядят следующим образом (в основном свойство indexer просто возвращает ввод, но в верхнем регистре - тривиальный пример, но работает для тестирования):

    public class TestClass
    {
        public InnerClass this[string indexParameter]
        {
            get
            {
                return new InnerClass { Value = indexParameter.ToUpper() };
            }
        }
    }

    public class InnerClass
    {
        public string Value { get; set; }
    }
...