【发布时间】:2009-11-10 13:09:45
【问题描述】:
有没有办法将 lambda 的字符串表示形式转换为 lambda Func?
Func<Product, bool> func = Parse<Product, bool>("product => product.Name.Length > 0");
我尝试了 Dynamic LINQ,但它没有按预期工作 - 例如它不需要 lambda 语法 =>。
答案总结:
- 编写我自己的 C# 编译器 - 非常有趣
- 启动外部编译器(如 csc.exe) - 非常慢
- 使用 LINQ - 正如我所说,我看不出它如何解析 lambda 表达式
我为什么需要这个:因为没有办法将 lambdas 传递给自定义属性,例如
[Secure(role => role.CanDoThis && role.AllowedCount > 5)]
因此,作为一种解决方法,我想将 lambda 作为字符串传递:“role => role.CanDoThis && role.AllowedCount > 5”。但似乎我必须像这样使用 LINQ:“CanDoThis && AllowedCount > 5” - 因为这是它理解的语法。但我的问题是关于真正的 lambda,我在提问时已经使用过 LINQ。
【问题讨论】:
-
您为什么担心启动编译器会很慢?您可以缓存结果表达式。
-
似乎 C# 5 会提供一些东西来做你想做的事。观看来自 PDC 2008 的视频,其中 Anders Hejlsberg 谈到了 C# 的未来。
-
我正在等待 C# 4.0 发布... C# 5 太遥远了 ;-) 我实际上需要这个特性来用于属性中的 lambda。希望 4.0 将拥有它(以及通用属性)。
-
c# 4.0 中不会有通用属性。 stackoverflow.com/questions/1211170/…
-
虽然很遗憾,但在这种情况下,我需要能够将 lambdas/delegates 传递给属性,而不是通用属性。引用问题中的 4.0 规范让我害怕 ;-) 它甚至不包含“lambda”这个词!