如何获得表达式的值
本文关键字:表达式 何获得 | 更新日期: 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; }
}