class Test
{
static void Main(string[] args)
{
//c#Expression表达式树了解
Expression<Func<int>> add = () => 1 + 2;
var func = add.Compile(); // Create Delegate--将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。
var answer = func(); // Invoke Delegate
Console.WriteLine(answer);//结果3
#region 表达式树不是编译和可执行的代码,如果要执行它,需要将它转换成IL指令。
// Addition is an add expression for "1 + 2"
var one = Expression.Constant(1, typeof(int));
var two = Expression.Constant(2, typeof(int));
var addition = Expression.Add(one, two);
Console.WriteLine(addition);//结果:(1+2)
#endregion
#region Lambda--表达式创建表达式树
Expression<Action<int>> actionExpression = n => Console.WriteLine(n);
Expression<Func<int, bool>> funcExpression1 = (n) => n < 0;
Expression<Func<int, int, bool>> funcExpression2 = (n, m) => n - m == 0;
//表达式树编译成委托
var lambda = actionExpression.Compile();//Create Delegate--将表达式树描述的 lambda 表达式编译为可执行代码,并生成表示该 lambda 表达式的委托。
lambda(11);//输出11
var fe1 = funcExpression1.Compile();
bool f1 = fe1(1);
Console.WriteLine(f1);//输出False
var fe2 = funcExpression2.Compile();
bool fe = fe2(2, 4);
Console.WriteLine(fe);//输出False
#endregion
Console.Read();
}
}