式ツリーでCompile()を呼び出すと生成されるILコードを表示できますか?この非常に簡単な例を考え:今コンパイル済み式から生成されたILコードを表示
class Program
{
public int Value { get; set; }
static void Main(string[] args)
{
var param = Expression.Parameter(typeof(Program));
var con = Expression.Constant(5);
var prop = Expression.Property(param, typeof(Program).GetProperty("Value"));
var assign = Expression.Assign(prop, con);
Action<Program> lambda = Expression.Lambda<Action<Program>>(assign, param).Compile();
Program p = new Program();
lambda(p);
//p.Value = 5;
}
}
を、式ツリーはMain
の最後の行が言うことありません。アプリケーションをコンパイルし、リフレクターで開きます。あなたは割り当てを行うp.Value = 5;
のILコードを見ることができます。しかし、表現ツリーは実行時に作成されコンパイルされました。結果のILコードをコンパイルから見ることは可能ですか?
をしたいですか?あるいは、あなたが特に興味を持っている 'Expression'出力について何かありますか? –
具体的な内容はありません。私は時々ILコードを見るのが好きです。しかし、式を使用すると、コンパイルされたアセンブリでILを取得しないメソッドを作成できます。その式ツリーの作成に使用されたILはそこにありますが、式ツリーのコンパイル自体の結果ではありません。それは理にかなっていますか?これは単なる好奇心であり、私が見ることのできる実際の実用的な目的には役立たない。 – Amy
素晴らしい** LinqPad **ツールを試しましたか? http://www.linqpad.net/生成されたコードをMSILとして表示して、ほとんど何でもすばやく試すことができます。 – AFract