社区
C#
帖子详情
什么是表达式目录树?
魂牵梦萦奇
2010-06-04 01:40:23
Lambda 表达式我懂,但不懂什么是表达式目录树,谁能给我解释下,并举个例子.
...全文
113
4
打赏
收藏
什么是表达式目录树?
Lambda 表达式我懂,但不懂什么是表达式目录树,谁能给我解释下,并举个例子.
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
魂牵梦萦奇
2010-06-16
打赏
举报
回复
谢谢。
yalan
2010-06-04
打赏
举报
回复
给你转个文章:
地址:http://www.cnblogs.com/jams742003/archive/2009/12/23/1630432.html
(一)Lambda创建表达式目录树
Expression<Func<int, int, int>> exp1 = (a, b) => a * b+2;
说明一下:Func
Func<(Of <(T1, T2, TResult>)>)
泛型委托:封装一个具有两个参数并返回 TResult 参数指定的类型值的方法。
T1:此委托封装的方法的第一个参数类型。
T2:此委托封装的方法的第二个参数类型。
Tresult:此委托封装的方法的返回值类型。
例如:现在求2个int类型的和
(1) 原始的方法
public int Add(int a, int b)
{
return a + b;
}
(2)通过委托来实现
delegate int deleAdd(int a, int b);
public void DeleConcrete()
{
deleAdd deleadd= Add;
deleadd(1, 2);
}
(3)直接通过泛型委托Func来实现
public int GetFunc(int a,int b)
{
Func<int, int, int> add = Add;
return add(a, b);
}
(二)分解表达式目录树
这点可能想到小学数学中的四则运算。对于a*b+2来说,先算乘,再算加
用图表示为:
每个矩形框为一个节点(表达式类型),节点有多种类型。
附表表达式类型:
类
说明
BinaryExpression
表示包含二元运算符的表达式。
ConditionalExpression
表示包含条件运算符的表达式。
ConstantExpression
表示具有常量值的表达式。
ElementInit
表示 IEnumerable 集合的单个元素的初始值设定项。
Expression
提供一种基类,表示表达式目录树节点的类派生自该基类。它还包含用来创建各种节点类型的 static(在 Visual Basic 中为 Shared)工厂方法。这是一个 abstract 类。
Expression<(Of <(TDelegate>)>)
以表达式目录树的形式将强类型 lambda 表达式表示为数据结构。无法继承此类。
InvocationExpression
表示将委托或 lambda 表达式应用于参数表达式列表的表达式。
LambdaExpression
描述一个 lambda 表达式。
ListInitExpression
表示包含集合初始值设定项的构造函数调用。
MemberAssignment
表示初始化新创建对象的字段或属性。
MemberBinding
提供一种基类,该基类派生表示绑定的类,这些绑定用于初始化新创建对象的成员。
MemberExpression
表示访问字段或属性。
MemberInitExpression
表示调用构造函数并初始化新对象的一个或多个成员。
MemberListBinding
表示初始化新创建对象的集合成员的元素。
MemberMemberBinding
表示初始化新创建对象的成员的成员。
MethodCallExpression
表示调用一种方法。
NewArrayExpression
表示创建新数组并可能初始化该新数组的元素。
NewExpression
表示构造函数调用。
ParameterExpression
表示命名的参数表达式。
TypeBinaryExpression
表示表达式和类型之间的操作。
UnaryExpression
表示包含一元运算符的表达式。
而这个(a+b)*2的几个节点:
·a,b是参数,类型为ParameterExpression
·+,*,为二元运符,类型为BinaryExpression
·2为常量,类型为ConstantExpression
(三)通过表达式类型来创建目录树
a*b+2
节点有4个,2个参数,2个运算符,1个常量
·两个参数
//两个参数
ParameterExpression a = Expression.Parameter(typeof(int), "a");
ParameterExpression b = Expression.Parameter(typeof(int), "b");
//求积
BinaryExpression Multi=Expression.Multiply(a,b);
//常量
ConstantExpression x2 = Expression.Constant(2);
//求和
BinaryExpression Add = Expression.Add(Multi, x2);
//创建一个表示lambda表达式的对象
LambdaExpression lexp = Expression.Lambda<Func<int, int, int>>(Add, a, b);
//查看表达式
Console.WriteLine(lexp.ToString());
创建方法是通过Expression的工厂方法来创建。
(四)使用
Expression<Func<int, int, int>> lexp = Expression.Lambda<Func<int, int, int>>(Add, a, b);
Func<int, int, int> fun = lexp.Compile();
Console.WriteLine(fun(3,5));
更多内容请参见:
ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.chs/dv_fxadvance/html/fb1d3ed8-d5b0-4211-a71f-dd271529294b.htm
http://kb.cnblogs.com/page/42509/?page=1
wuyq11
2010-06-04
打赏
举报
回复
MSDN比较详细
表达式目录树
兔子-顾问
2010-06-04
打赏
举报
回复
表达式目录树
C#
表达式
目录
树
vs实用插件
首先,我们来理解什么是C#
表达式
目录
树
。
表达式
目录
树
(Expression Trees)是.NET框架4.0引入的一个新特性,它将C#或VB.NET的
表达式
表示为一个可遍历的数据结构。这种数据结构由一系列节点组成,每个节点代表
表达式
...
C#简单实现
表达式
目录
树
(Expression)
"C#简单实现
表达式
目录
树
(Expression)"
表达式
目录
树
是数据形式表示语言级别代码的一种数据结构,以
树
形结构存储数据。每个节点都表示一个
表达式
。在C#中,
表达式
目录
树
可以使用Expression类来实现。
表达式
目录
...
C#
表达式
目录
树
示例详解
1、
表达式
目录
树
表达式
目录
树
,在C#中是Expression来定义的,它是一种语法
树
,或者说是一种数据结构。其主要用于存储需要计算、运算的一种结构,它只提供存储功能,不进行运算。通常Expression是配合Lambda一起...
C#
表达式
目录
树
的应用详解
使用
表达式
目录
树
实现两个不同类型的属性赋值: public class People { public int Age { get; set; } public string Name { get; set; } public int Id; } public class PeopleCopy { public int Age { get; set; ...
C#
表达式
树
Expression Trees的知识梳理
目录
简介 Lambda
表达式
创建
表达式
树
API 创建
表达式
树
解析
表达式
树
表达式
树
的永久性 编译
表达式
树
执行
表达式
树
修改
表达式
树
调试 简介
表达式
树
以
树
形数据结构表示代码,其中每一个节点都是一种...
C#
111,119
社区成员
642,548
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章