我刚开始玩 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) 中,这里有更多的灵活性,尽管仍然不清楚该语言 (C# 4.0) 将通过 lambdas 提供什么。
基本上,我不确定您是否可以(方便地)做您希望使用Expression
.