考虑下面的语句拉姆达例如:.NET - 翻斗声明拉姆达体串
var fMyAction = new Action(() =>
{
x += 2;
something = what + ever;
});
什么是可能的方式来获取拉姆达的机构,它转储到字符串? (最终将允许为Action
类别编写扩展方法:fMyAction.Dump()
,它将返回"x += 2; something = what + ever;"
)。
谢谢
考虑下面的语句拉姆达例如:.NET - 翻斗声明拉姆达体串
var fMyAction = new Action(() =>
{
x += 2;
something = what + ever;
});
什么是可能的方式来获取拉姆达的机构,它转储到字符串? (最终将允许为Action
类别编写扩展方法:fMyAction.Dump()
,它将返回"x += 2; something = what + ever;"
)。
谢谢
这是不可能的形式。你的lada被编译成字节码。虽然在理论上可以反编译字节码,就像反射器一样,但是很难,容易出错,并且不会给你所编译的确切代码,而只是代码相当。
如果你use an Expression<Action>
而不是只是Action
你会得到描述lamda的表达式树。并且将表达式树转换为字符串是可能的(并且存在这样的库)。
但是这不可能在你的例子中,因为它是一个多语句拉姆达。只有简单的lamdas可以自动转换为表达式树。
通过这里的教程阅读,
http://blogs.msdn.com/b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx
狠抓访问者模式,他用走一个给定的表达式树。你应该能够改变它以适应你的需求。
这是什么?请给出更多关于你的问题的背景,可能有一个完全不同的解决方案。你现在想要做的事情几乎是不可能的,在C-sharp中没有任何意义。 – 2011-02-07 14:54:04
@SK-逻辑:这绝对超出了本文的范围,在抽象层面上讨论我自己的理由。 – 2011-02-07 16:16:01