.NET – 将语句lambda body转换为字符串
给出以下语句lambda示例:
var fMyAction = new Action(() => { x += 2; something = what + ever; });
有什么方法可以获得lambda的主体并将其转换为字符串? (最终将允许为此类的Action
类编写扩展方法的东西: fMyAction.Dump()
将返回"x += 2; something = what + ever;"
)。
谢谢
这种forms是不可能的。 你的lamda被编译成字节码。 虽然理论上可以反编译字节码,就像reflection器那样,它很难,容易出错并且不会给你编译的确切代码,但只是代码相当。
如果使用Expression
而不仅仅是Action
则会获得描述lamda的表达式树。 并且可以将表达式树转换为字符串(并且存在执行它的现有库)。
但是这在你的例子中是不可能的,因为它是一个多语句lamda。 只有简单的lamdas才能自动转换为表达式树。
在这里阅读教程,
http://blogs.msdn.com/b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx
密切关注他用来走一个给定表达式树的访客模式。 您应该能够轻松改变它以满足您的需求。
看看http://reverseblade.blogspot.com/2008/11/how-to-serialize-lambda-expressions.html
- MemoryStream:为什么在readByte之后转换为byte
- 如何使用amazon sdk为虚拟域生成预签名的Amazon S3url?
- 用于.NET 4.5 wpf项目的.NET 4.5 wpf项目的System.Windows.Interactivity
- WCF不能用于通信,因为它处于Faulted状态
- 我可以将WCF DataContract添加到复杂类型吗?
- PredicateBuilder是如何工作的
- 如何通过Reflection获取属性的DisplayAttribute?
- 如何在代码中设置ServiceHostingEnvironment.AspNetCompatibilityEnabled = true(不在配置中).NET / C#
- 使用Transactional NTFS(TxF)获得任何真实的企业级体验?