【问题标题】:Extract Expression Tree From Action从动作中提取表达式树
【发布时间】:2008-11-10 15:30:40
【问题描述】:

我刚开始玩 Linq Expressions,但我碰壁了。我需要从一个动作创建一个表达式树。不幸的是,我无法将动作作为表达式,这基本上是我必须使用的:

public void Something(Action action){}

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

【问题讨论】:

    标签: c# lambda


    【解决方案1】:

    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 做您希望做的事情。

    【讨论】:

    • 我就是这么想的。这是一个来自 Boo 文件的动作,所以幸运的是我可以访问 Boo 表达式并得到我需要的东西:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多