如何获取常量表达式的值

And*_*ock 2 c#

我正在尝试评估常量表达式的值。在调试器中我可以看到该值:

手表

但我如何在代码中得到它?

表达式的形式为:

x => x.ListPropery[5].ChildProperty
Run Code Online (Sandbox Code Playgroud)

我正在沿着表达式将其转换为字符串,但我陷入了索引器部分。

索引器创建一个MethodCallExpressionon IList<>to get_Item,然后我可以进入参数以获取如下生成的常量表达式:

for(var i = 0; i < list.Count; i++)
{
    var j = i;
    Expression<Func<IList<TValue>, TValue>> indexer = xs => xs[j];
Run Code Online (Sandbox Code Playgroud)

更新:

(exp.Arguments[0] as MemberExpression).Member
Run Code Online (Sandbox Code Playgroud)

返回一个MemberInfo

Daw*_*ert 5

您还可以尝试以下操作:

LambdaExpression lambda = Expression.Lambda(exp.Arguments[0]);
var val = lambda.Compile().DynamicInvoke();
Run Code Online (Sandbox Code Playgroud)