C# 3.0 / The LINQ Project September 2005 / Expression treesの実験

Expressionの実験コード

using System;
using System.Query;
using System.Expressions;
static class Program {
	static void Main() {
		Expression<Func<double, double, double>> e =(n, m) => (n * 3 - 4 / m) + Math.Pow(n, m);
		Expression<Func<char, int, string>> f =(c, r) => new string(c,r).ToUpper();
		Console.WriteLine(e);
		Console.WriteLine(f);
	}
}

実行結果のコンソール出力

|n,m| Add(Subtract(Multiply(n, 3), Divide(4, m)), Pow(n, m))
|c,r| new System.String(c, r).ToUpper()

 きちんとした環境でなく、コンソールでコンパイルするなどして実験しました。また詳細はわかりませんが、強力なコードが短く書けそうです。ラムダ式で書かれた実行コードによる表現を直にExpressionクラスオブジェクトを用いて木構造化して(Expression tree)、構造をデータとして扱うことができるようです。ただし、実行方法は用意されていないのかも知れません。どの部分も最終仕様ではないようなので、まだ変化するかも知れません。