【发布时间】:2010-09-19 07:11:54
【问题描述】:
我正在尝试在项目中使用 Lambda 表达式来映射到第三方查询 API。所以,我正在手动解析表达式树。
如果我传入如下 lambda 表达式:
p => p.Title == "title"
一切正常。
但是,如果我的 lambda 表达式看起来像:
p => p.Title == myaspdropdown.SelectedValue
使用 .NET 调试器,我看不到该功能的实际价值。相反,我看到的是:
p => p.Title = (value(ASP.usercontrols_myaspusercontrol_ascx).myaspdropdown.SelectedValue)
什么给了?当我尝试将表达式的右侧作为字符串抓取时,我得到 (value(ASP.usercontrols_myaspusercontrol_ascx).myaspdropdown.SelectedValue) 而不是实际值。 如何获得实际值?
【问题讨论】:
-
我认为问题是(而且我不是表达式专家,所以这不是答案)是表达式不是 lambda;它描述了您希望检索的数据。它没有被执行,它被解释了。
-
这意味着该值不会在运行时替换您的表达式,而是在编译时永久设置。为了获取值,解释 lambda 的代码必须了解用户控件的概念以及如何提取它
-
除非解释表达式的代码可以访问您的控件并且被编码为执行此操作,否则这是不可能的。如果代码有一个重载或另一个执行相同操作但获取实际值的方法,您可以使用它和一个 lambda 在运行时检索该值。
标签: c# lambda expression-trees