• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

ExpressioninC#

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

The System.Linq.Expressions namespace contains classes, interfaces and enumerations that enable language-level code expressions to be represented as objects in the form of expression trees. 也就是使用该命名空间中的类可以将一段代码表示为对象。在System.Linq.Expressions中,列举了很多种的表达式,其中包括:BinaryExpression,ConditionalExpression,ConstantExpression,ElementInit,Expression, Expression(TDelegate) ,InvocationExpression,LambdaExpression,ListInitExpression,MemberAssignment,MemberBinding,MemberExpression,MemberInitExpression,MemberListBinding,MemberMemberBinding, MethodCallExpression,NewArrayExpression,NewExpression,ParameterExpression,TypeBinaryExpression,UnaryExpression.
在具体使用之前先特别介绍两个类:Expression, Expression(TDelegate) 。

  • Expression: The abstract class Expression provides the root of a class hierarchy used to model expression trees. Provides the base class from which the classes that represent expression tree nodes are derived. It also contains static (Shared in Visual Basic) factory methods to create the various node types.
  • Expression(TDelegate):Represents a strongly typed lambda expression as a data structure in the form of an expression tree.

Expression的一个子类就是LambdaExpression。然后泛型Expression<TDelegate>类又继承了LambdaExpression, 这看起来容易让人混淆. Expression和Expression<TDelegate>的不同之处在于Expression<TDelegate>依照参数和返回类型严格的指出了表达式是那种类型. 显而易见, 这是由TDelegate参数类型指定的, 其必须是一个委托类型. 例如, 我们的简单加法表达式是一个没有参数并且返回一个int类型的表达式——这与Func<int>匹配, 因为我们可以使用Expression<Func<int>>来以一个静态类型的方式表示该表达式. 我们可以通过使用Expression.Lambda方法来完成这个工作。 该方法拥有大量的重载——我们例子使用了泛型方法, 该方法使用了一个类型参数指出我们想展示的委托类型.
LambdaExpression有一个Compile方法, 可以使用它来创建一个适当类型的委托. 现在该委托可以在普通的方式下被执行, 就像是它是用一个普通的方法或者其他方式来创建的一样。
例子一:

 

);
        }

例子二:

 

));
        }

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C# winfrom 窗体的StartPosition 属性发布时间:2022-07-13
下一篇:
(转载)C#语言开发规范发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap