【发布时间】:2008-11-10 15:30:40
【问题描述】:
我刚开始玩 Linq Expressions,但我碰壁了。我需要从一个动作创建一个表达式树。不幸的是,我无法将动作作为表达式,这基本上是我必须使用的:
public void Something(Action action){}
我需要访问 Action 的主体以提取变量和值。
【问题讨论】:
我刚开始玩 Linq Expressions,但我碰壁了。我需要从一个动作创建一个表达式树。不幸的是,我无法将动作作为表达式,这基本上是我必须使用的:
public void Something(Action action){}
我需要访问 Action 的主体以提取变量和值。
【问题讨论】:
Action 不是Expression;它只是一个委托(在某些时候可能是一个表达式,可能是一个 lambda,也可能不是)。
要使其可行,您需要重构为:
public void Something(Expression<Action> action) {...}
此外,C# 3.0 / .NET 3.5 lambda 表达式不适用于Action-type 表达式。你能表达的东西非常有限。 Func-type 表达式效果更好。在 .NET 4.0 (CTP) 中,这里有 much more flexibility,尽管仍不清楚该语言 (C# 4.0) 将通过 lambdas 提供什么。
基本上,我不确定您是否可以(方便地)使用Expression 做您希望做的事情。
【讨论】: