2011-02-07 4 views
7

に次のステートメントラムダ例を考える:.NET - ダンプステートメントラムダ本体は文字列

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

はそのラムダの本体を取得し、それを文字列にダンプすることも可能な方法は何ですか? (最終的にはActionクラスの拡張メソッドを書くことができます:fMyAction.Dump()これは"x += 2; something = what + ever;"を返します)。

ありがとうございました

+0

どのようなものですか?あなたの質問に多くの背景を与えてください、おそらく完全に異なる解決策があります。今あなたがしようとしていることはほとんど不可能で、Cシャープでは意味をなさない。 –

+1

@ SK-logic:抽象的なレベルで私自身の理由を議論することは、この特定の投稿の範囲外であることは間違いありません。 –

+0

あなたは少なくとも文字列表現が必要な理由、この文字列が元のソースにどれくらい近いか、そしてパフォーマンス要件は何かを説明することなく、有用な答えを得ることはできません。デコンパイル以外にもいくつかのオプションがあります。 –

答えて

11

これはできません。あなたのラムダはバイトコードにコンパイルされます。理論的には、リフレクターのように、バイトコードを逆コンパイルすることは可能ですが、それは難しく、エラーが発生しやすく、コンパイルした正確なコードを提供するものではありません。

Actionの代わりにuse an Expression<Action>の場合は、lamdaを表す式ツリーが表示されます。また、式ツリーを文字列に変換することも可能です(既存のライブラリもあります)。

しかし、あなたの例ではマルチステートメントlamdaなので、これは不可能です。シンプルなlamdasだけが自動的に式ツリーに変換されます。ここでチュートリアルを読む

+0

あなたはそうです...私はこれを見つけて、シャンパンを開く準備ができました:http://code.msdn.microsoft.com/exprserialization突然、すべての:http://msdn.microsoft.com/en-us/ライブラリ/ bb397745.aspx –

関連する問題