c# - 从 Action 中提取表达式树

标签 c# lambda

我刚开始尝试使用 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/

相关文章:

c# - "The path .. would result in a file outside the App Bundle and cannot be used"错误,单触摸/Xamarin

c# - Windows 通用应用程序中的反向地理编码

c# - 处理未读邮件时出现问题并在处理后将其标记为已读

c# - 暴露的端口 0 未映射。测试容器 C#

java - Comparator.reversed() 不使用 lambda 进行编译

c# - 如何使用C#批量插入MySQL

c# - 表达式树复制或转换

c# - 如何在 vb.net 中使用 BackgroundWorker 将代码包装在 lambda 表达式中?

结合 lambda 和 multi-catch 子句时出现 Java 错误?

c++ - 在通用 lambda 中使用 constexpr-if 来确定参数的类型