我刚开始尝试使用 Linq 表达式,但遇到了瓶颈。我需要从一个 Action 创建一个表达式树。不幸的是,我无法将 Action 作为表达式,这基本上就是我必须使用的:
public void Something(Action action){}
我需要访问 Action 的主体以提取变量和值。
最佳答案
Action
不是Expression
;它只是一个委托(delegate)(在某些时候可能是一个表达式,可能是一个 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) 将通过 lambda 提供什么。
基本上,我不确定您是否可以(方便地)使用 Expression
做您希望的事情。
关于c# - 从 Action 中提取表达式树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/278151/