1. public class DemoClass
  2. {
  3. /// <summary>
  4. /// 通过Lambda表达式,在构造函数中赋初始值
  5. /// </summary>
  6. /// <param name="propertyFunc"></param>
  7. /// <param name="propertyValue"></param>
  8. public DemoClass (Expression<Func<CustomerBasicInfo, object>> propertyFunc, object propertyValue)
  9. {
  10. #region 就是这段代码来捕捉Lambda表达式对象并解析的
  11. //var propertyName = (((propertyFunc.Body as UnaryExpression).Operand as MemberExpression).Member as PropertyInfo).Name;//利用VS跟踪工具获得的RunTimeExpression转换过来的方法
  12. var propertyName = ((propertyFunc.Body as UnaryExpression).Operand as MemberExpression).Member.Name;//简化后的方法
  13. #endregion
  14.  
  15. PropertyInfo[] props = this.GetType().GetProperties();
  16. try
  17. {
  18. foreach (PropertyInfo p in props)
  19. {
  20. if (p.SetMethod != null)
  21. {
  22. object value;
  23. if (p.Name.Equals(propertyName))
  24. {
  25. value = Convert.ChangeType(propertyValue, p.PropertyType);
  26. }
  27. else
  28. {
  29. Type t = p.PropertyType;
  30. value = t.IsValueType ? Activator.CreateInstance(t) : (t.Name.ToLower().Equals("string") ? string.Empty : null);
  31. }
  32. p.SetValue(this, value);
  33. }
  34. }
  35. }
  36. catch (Exception)
  37. {
  38. throw;
  39. }
  40. }
  41. }

上面这段代码主要实现了这样一个功能:通过Lambda表达式,在初始化对象实例的时候,为指定的属性赋值。 
简单地说,上面的方法调用方式以及结果如下: 
DemoClass dc = new DemoClass (s => s.Name, “李四”); 
Console.WriteLine(dc.Name);//输出 李四


朋友们可能已经发现,这样的做法无异于:脱裤子放屁,多此一举。 
因为我们可以通过以下的写法实现相同的目的,而不需要写任何多余的代码: 
DemoClass dc = new DemoClass () { Name =“李四”};


那么,这样做有什么意义呢? 
其实,在构造函数中使用Lambda表达式作为参数,这件事情本身并没有什么太大的意义,但是它至少让我在Lambda表达式的使用方面有了更多了解。 
并且在写代码的过程中我受到启发,发现利用Lambda表达式,可以优雅地实现WPF中的INotificationChanged接口。 
至于具体如何实现,我得在下一篇文章中详述了。

转载来源 http://blog.csdn.net/honantic/article/details/50778014

将Lambda表达式作为参数传递并解析-在构造函数参数列表中使用Lambda表达式的更多相关文章

  1. Sql语句报ORA-01795: 列表中的最大表达式数为 1000

    错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other W ...

  2. IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

    问题描写叙述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决的方法: 问题原因是:SQL进行IN查询时.IN中的 ...

  3. java jdbc oracle ORA-01795: 列表中的最大表达式数为 1000

    在操作SQL中存在In的数量如果超过1000条会提示   ORA-01795: 列表中的最大表达式数为 1000 归纳有几种方式出现的: 第一种是:我在上一个 [jdbc 同时执行 查询和删除操]作中 ...

  4. 对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)

    /** * @category  * 原:strIDs in ( 100001,100002,100003,....................,110001,120001,130001,1400 ...

  5. ORA-01795: 列表中的最大表达式数为1000的解决方法

    IN中的数据量不能超过1000条. 解决方案:把条件分成多个少于1000的IN即: DELETEFROMT_MM_SECTION_SITE_UPDATEWHERE T.T_MM_SECTION_SL_ ...

  6. ORA-01795: 列表中的最大表达式数为 1000

    系统报出一SQL异常,内容如下: java.sql.SQLException: ORA-01795: maximum number of expressions in a list is 1000 找 ...

  7. java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000

    后台报了一些异常日志,查阅后发现在 oracle 数据库中使用 in 关键字条件不能超过 1000 个,当时写查询语句时没有关注这个问题 总结一下解决方法 1.分多次查询,对查询要求不高的话.把入参的 ...

  8. Java中的Lambda表达式

    Lambda来源于希腊字母入,发音为  /'læmdə/对高数有所了解的人都知道λ用于声明一个数学逻辑系统,表示根据XX的输入参数,会返回某个Y结果.这正是编程语言中函数(方法)的意思.因此Lambd ...

  9. Java 中的 Lambda 表达式

    Lambda表达式 Lambda 表达式是 JDK1.8 的一个新特性,又称特殊的匿名内部类,可以取代大部分的匿名内部类,语法更简洁,可以写出更优雅的 Java 代码,可以极大地优化代码结构. Lam ...

随机推荐

  1. 什么?studio3T试用期到了,还没有破解的办法?试制基于python的mongodb CRUD平台

    首先,安装python支持的mongodb库pip install pymongo from pymongo import MongoClient client = MongoClient('loca ...

  2. C# MVC的默认页

    MVC的默认页,其实是默认路由设置启动哪一个Controller的哪一个Action,在根目录的Global.asax.cs里面设置.是MVC项目里面的路由.將下面的controller和action ...

  3. Tomcat部署多个Springboot项目报错 InstanceNotFoundException: com.alibaba.druid:type=DruidDataSourceStat

    在一个tomcat服务器下部署了多个采用阿里druid作为数据连接池,结果启动报错.原因是不能在一个tomcat服务器下不能直接部署多个druid作为数据连接池的项目,需要配置. 解决办法: 在spr ...

  4. CSS之咖啡菜单网页设计

    今天记录学习的设计网站首页的咖啡菜单,综合运用所学习的html,css背景,文本,字体,链接,表格,盒子,选择器,定位,以及css3的阴影,圆角边框,2d变换等内容. ㈠咖啡菜单整体样式 运用html ...

  5. jquery visible 选择器 语法

    jquery visible 选择器 语法 作用::visible 选择器选取每个当前是可见的元素.除以下几种情况之外的元素即是可见元素:设置为 display:none   type="h ...

  6. [shell]管道连接的命令判断返回值

    场景: 在bash执行管道连接的命令,需要获取到各个命令的返回值用于判断 在脚本中我们可能需要将执行结果打印到屏幕,同时保存在文件中供后面分析用,写出如下的命令 command 2>&1 ...

  7. Spark译文(一)

    Spark Overview(Spark概述) ·Apache Spark是一种快速通用的集群计算系统. ·它提供Java,Scala,Python和R中的高级API,以及支持通用执行图的优化引擎. ...

  8. html密码框value为空,但是总有默认密码(原)

    input输入框加属性:autocomplete="new-password" ,浏览器就不会给他填充默认密码. <input class="form-contro ...

  9. 缓存区溢出之slmail fuzzing

    这是我们的实验环境 kali 172.18.5.118smtp windows2003  172.18.5.117  pop3 110 smtp 25 本机 172.18.5.114 已经知道slma ...

  10. AES加密算法在Linux下出现随机加密结果

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...