开发者

.NET - dump statement lambda body to string

开发者 https://www.devze.com 2023-02-08 20:01 出处:网络
Given the following statement lambda example: var fMyAction = new Action(() => { x += 2; something = what + ever;

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消