如何解决如何获得常量表达式的值
| 我正在尝试评估常量表达式的值。在调试器中,我可以看到该值: 但是我如何在代码中得到它呢? 表达式的形式为:x => x.ListPropery[5].ChildProperty
我正在沿着表达式将其转换为字符串,但是我被卡在了索引器部分。
索引器在IList<>
到get_Item
上创建一个MethodCallExpression
,然后我可以将其输入参数,以获取如下生成的常量表达式:
for(var i = 0; i < list.Count; i++)
{
var j = i;
Expression<Func<IList<TValue>,TValue>> indexer = xs => xs[j];
更新:
(exp.Arguments[0] as MemberExpression).Member
返回a6
谢谢!
解决方法
啊哈!
(exp.Arguments[0] as MemberExpression).Member
是FieldInfo
所以我可以做:
((exp.Arguments[0] as MemberExpression).Member as FieldInfo).GetValue(((exp.Arguments[0] as MemberExpression).Expression as ConstantExpression).Value)
, 您也可以尝试以下方法:
LambdaExpression lambda = Expression.Lambda(exp.Arguments[0]);
var val = lambda.Compile().DynamicInvoke();
, 有大量关于建立LinqProvider的文章系列。
http://blogs.msdn.com/b/mattwar/archive/2008/11/18/linq-links.aspx
在本部分中,有一个确定常量表达式的求值器
http://blogs.msdn.com/b/mattwar/archive/2007/08/01/linq-building-an-iqueryable-provider-part-iii.aspx
我已经成功使用了它。
, 右键单击调试器中表达式的名称,选择\'add watch \',然后将该名称复制到您的代码中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。