2011-02-07 48 views
7

考虑下面的语句拉姆达例如:.NET - 翻斗声明拉姆达体串

var fMyAction = new Action(() => 
{ 
    x += 2; 
    something = what + ever; 
}); 

什么是可能的方式来获取拉姆达的机构,它转储到字符串? (最终将允许为Action类别编写扩展方法:fMyAction.Dump(),它将返回"x += 2; something = what + ever;")。

谢谢

+0

这是什么?请给出更多关于你的问题的背景,可能有一个完全不同的解决方案。你现在想要做的事情几乎是不可能的,在C-sharp中没有任何意义。 – 2011-02-07 14:54:04

+1

@SK-逻辑:这绝对超出了本文的范围,在抽象层面上讨论我自己的理由。 – 2011-02-07 16:16:01

回答

11

这是不可能的形式。你的lada被编译成字节码。虽然在理论上可以反编译字节码,就像反射器一样,但是很难,容易出错,并且不会给你所编译的确切代码,而只是代码相当。

如果你use an Expression<Action>而不是只是Action你会得到描述lamda的表达式树。并且将表达式树转换为字符串是可能的(并且存在这样的库)。

但是这不可能在你的例子中,因为它是一个多语句拉姆达。只有简单的lamdas可以自动转换为表达式树。