如何获得表达式的值

本文关键字:表达式 何获得 | 更新日期: 2023-09-27 18:05:08

我有一个使用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")返回的值是字符串类型。

我不知道怎么得到它。我知道我必须创建一个lambda并编译它,但我不知道怎么做。

感谢您的宝贵时间。

如何获得表达式的值

也许你正在寻找这样的代码:

    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; }
    }