我刚开始玩Linq Expressions而且我已经撞墙了。我需要从Action创建一个表达式树。不幸的是,我无法将Action作为一个表达式,这基本上就是我必须要处理的事情:
public void Something(Action action){}
我需要访问Action的主体来提取变量和值。
答案 0 :(得分:4)
Action
不是Expression
;它只是一个委托(在某些时候可能是一个表达式,可能是一个lambda,可能也不是)。
为了使其可行,您需要重构为:
public void Something(Expression<Action> action) {...}
此外,C#3.0 / .NET 3.5 lambda表达式对Action
- 类型表达式不起作用。你所表达的内容非常有限。 Func
- 类型表达式更好用。在.NET 4.0(CTP)中,这里有much more flexibility,尽管还不清楚语言(C#4.0)将通过lambdas提供什么。
基本上,我不确定你能否(方便地)使用Expression
做你想做的事。