这篇博客只能用来批判因为我刚刚学习linq对它了解只有简单的linq to sql 的语句所以来写这个博客只能说是班门弄斧了,看的下去的话就坚持看吧。
在网上看了别人的文章目前水平有限借鉴别人的思想吧。
描述:表达式树是将我们原来可以直接由代码编写的逻辑以表达式的方式存储在树状的结构里,从而可以在运行时去解析这个树,然后执行,实现动态的编辑和执行代码。
示例:
如果用Console.WriteLine(tree.ToString());
// x=> (x + 1)输出结果是x=> (x + 1)
tree只是lambada表达式的树形结构信息,并不是函数可以直接调用
Func<int,int> fun= tree.Compile();
fun(3).Dump();//用来输出
上面可能不直观那看下面:
ConstantExpression ce1 = Expression.Constant(10);//这个没有什么好疑义的就是返回10这个常量
Expression<Func<
int
>> exp = Expression.Lambda<Func<
int
>>(ce1);
Console.WriteLine(exp.Compile().Invoke());
下面我们来看怎样构建一个表达式树:
首先看几个类型
下面看代码:(直角三角形的判断)
1.创建参数
ParameterExpression expX= Expression.Parameter(typeof(int),"x");
ParameterExpression expY= Expression.Parameter(typeof(int),"y");
ParameterExpression expZ= Expression.Parameter(typeof(int), "z");
2.计算
BinaryExpression mulX = Expression.Multiply(expX, expX);
BinaryExpression mulY= Expression.Multiply(expY, expY);
BinaryExpression mulZ= Expression.Multiply(expZ, expZ);
BinaryExpression addXY = Expression.Add(mulX,mulY);
3.最后的关联
BinaryExpression final= Expression.Equal(mulZ, addXY);
似乎明白了一些吧,但是感觉还是不够清晰不够有条理性,因为目前能力有限只能零星的了解等进一步的学习后希望会有一个系统的深入了解。
后面的任意参数构建、以及树的遍历还会抽时间学习,最近确实时间不够多,只能抽时间看看,人家一小时学会那么我就话更多的时间去学,可
能我个人速度慢消化的少但是会继续努力,我相信总会学会的。之后还会继续追加内容的。
原文:http://www.cnblogs.com/myloveblogs/p/5043810.html