码迷,mamicode.com
首页 > Windows程序 > 详细

C#表达式树的两种构建----简单示例

时间:2015-09-17 21:17:13      阅读:429      评论:0      收藏:0      [点我收藏+]

标签:

C#表达式树的构建方式一种是通过lambda表达式,构建方式很简单Expression<Func<>> name=lambda;

Func<>有返回值的委托,系统自己包含的,可以直接调用。<>里边的最后一个参数为返回的参数类型。

下边是我的例子,有一个Users的实体类。传进去一个Users实体,返回一个bool值。

构建完成之后就是调用,表达式树Expressions的Complie()方法,结果为Func<>委托,给委托值就等于把值传给了lambda表达式中。

 Console.ForegroundColor = ConsoleColor.Green;
            Expression<Func<Users, bool>> expr = o => o.Id == 0;
            Func<Users, bool> func = expr.Compile();
            Users u = new Users() { Id = 1};
            Console.WriteLine(func(u).ToString());

 

下边的一个例子是通过API构建的,我们再次创建上边那个lambda表达式。需要注意的是我们构建的时传的参数o.Id,这里用到了反射,首先看lambda表达式为o=>o.Id==0

在ParameterExpression中传进去一个o,参数类型为Users,在反射出Users的属性Id。

 Expression<Func<Users, bool>> expre;
            ParameterExpression par1 = Expression.Parameter(typeof(Users),"o");
            PropertyInfo pro = typeof(Users).GetProperty("Id",BindingFlags.Instance | BindingFlags.Public);
            MemberExpression mem = Expression.Property(par1, pro.Name);
            ConstantExpression con = Expression.Constant(0, typeof(int));
            BinaryExpression bin = Expression.Equal(mem, con);
            expre = Expression.Lambda<Func<Users, bool>>(bin,new ParameterExpression[] { par1});
            bool a = expre.Compile()(u);
            Console.WriteLine(a.ToString());
            Console.Read();

运行结果为:False False

哎,只是一个简单的实现...................只是实现,没有什么优化之类的.........

加油吧。

更加麻烦的慢慢学,慢慢更新........

 

C#表达式树的两种构建----简单示例

标签:

原文地址:http://www.cnblogs.com/JayWist/p/4817394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!