从Action中提取表达式树

时间:2008-11-10 15:30:40

标签: c# lambda

我刚开始玩Linq Expressions而且我已经撞墙了。我需要从Action创建一个表达式树。不幸的是,我无法将Action作为一个表达式,这基本上就是我必须要处理的事情:

public void Something(Action action){}

我需要访问Action的主体来提取变量和值。

1 个答案:

答案 0 :(得分:4)

Action不是Expression;它只是一个委托(在某些时候可能是一个表达式,可能是一个lambda,可能也不是)。

为了使其可行,您需要重构为:

public void Something(Expression<Action> action) {...}

此外,C#3.0 / .NET 3.5 lambda表达式对Action - 类型表达式不起作用。你所表达的内容非常有限。 Func - 类型表达式更好用。在.NET 4.0(CT​​P)中,这里有much more flexibility,尽管还不清楚语言(C#4.0)将通过lambdas提供什么。

基本上,我不确定你能否(方便地)使用Expression做你想做的事。