[C#][ラムダ式][式木] Expression でラムダ式を作成してデリゲートとして実行する
以前「Expression の構造を調べてみる」と云う記事で、Expression の内部のツリー構造を調べた。
その中で、ラムダ式として足し算を行うだけの (x, y) => x + y と云うシンプルなラムダ式を Expression で受け、その構造を調べた。
using System; using System.Linq.Expressions; class Program { static void Main() { Expression<Func<int, int, int>> expression = (x, y) => x + y; } }
今回は、逆に Expression でラムダ式を作成し、これをデリゲートとして実行してみよう。
■ 今回のサンプルプログラム
今回のサンプルプログラムは次の通りだ。
using System; using System.Linq.Expressions; class Program { static void Main() { // ラムダ式の Parameter の x ParameterExpression parameterX = Expression.Parameter(typeof(int), "x"); // ラムダ式の Parameter の y ParameterExpression parameterY = Expression.Parameter(typeof(int), "y"); // ラムダ式の Body: x + y BinaryExpression body = Expression.Add(parameterX, parameterY); // ラムダ式: Parameter の x と y、Body で作成 Expression<Func<int, int, int>> lamda = Expression.Lambda<Func<int, int, int>>(body, parameterX, parameterY); // ラムダ式をコンパイルしてデリゲートを生成 Func<int, int, int> lamdaDelegate = lamda.Compile(); // 実行してみる: result が 3 になる int result = lamdaDelegate(1, 2); } }
このように、Expression でラムダ式をツリー上に組立て、コンパイルすることで、これをデリゲートとして実行することができる。
ディスカッション
コメント一覧
まだ、コメントがありません