.NET - dump statement lambda body to string
Given the following statement lambda example:
var fMyAction = new Action(() =>
{
x += 2;
something = what + ever;
});
What are possible ways to get the body of that lambda and dump it to string? (Something that will ultimately allow to write an extension method for Action
class of this kind: 开发者_StackOverflow中文版fMyAction.Dump()
which will return "x += 2; something = what + ever;"
).
Thanks
It's not possible in that form. Your lamda gets compiled to byte-code. While in theory it's possible to decompile the byte-code, just like reflector does, it's difficult, error prone and doesn't give you the exact code you compiled, but just code that's equivalent.
If you use an Expression<Action>
instead of just Action
you get the expression tree describing the lamda. And converting an expression tree to a string is possible(and there are existing libraries which do it).
But that's not possible in your example because it's a multi statement lamda. And only simple lamdas can be automatically converted to an expression tree.
Read through the tutorial here,
http://blogs.msdn.com/b/mattwar/archive/2007/07/30/linq-building-an-iqueryable-provider-part-i.aspx
Pay close attention to the visitor pattern he uses to walk a given expression tree. You should be able to alter it to fit your needs easy enough.
精彩评论