Last Updated 2011/09/21
System.Linq.Expressions 名前空間内に Expression<T> クラスがあります。このクラスは伝統的な IL ベースのメソッド本体ではなく、特定のラムダ式に対して「式ツリー」を必要とします。式ツリーはラムダ式のメモリ内表現で、式に依存しないデータ構造を生成します。
式ツリー "expression tree" とは、実行コードをデータ構造に変換したものです。特に、LINQ クエリ式のような C# コードを SQL データベースなどの別のプロセス上で操作するコードに変換したいときに有効です。
次のコードは、Func<T1, T2, TResult> デリゲートをラムダ式を使って定義します。
Func<int,int,int> function = (a, b) => a + b;
ラムダ式の部分は以下のコードと同じ意味です。
private int function(int a, int b) { return a + b; }
どちらの形式であっても次のコードは有効です。
int c = function(2, 3);
ラムダ式を使って定義した変数 function は実行コードを保持すると言い換えることができます。
すでに説明したように、式ツリーは実行コードではなく、データ構造のメモリ表現です。次に、実行コードを式ツリーに変換する手順を説明します。
System.Linq.Expressions 名前空間内にある Expression クラスを使います。以下のコードの expressino が式ツリーと呼ぶデータ構造です。
Expression<Func<int, int, int>> expression = (a,b) => a + b;
ところで、Microsoft のサイトにおいて、"Expression Tree Visualizer" というアプリケーションが公開されています。Visual Basic のソースファイルも付いていますから利用しやすいと思います。ダウンロード先は Tools のページに書いておきました。
−以上−