public class DemoClass
{
/// <summary>
/// 通过Lambda表达式,在构造函数中赋初始值
/// </summary>
/// <param name="propertyFunc"></param>
/// <param name="propertyValue"></param>
public DemoClass (Expression<Func<CustomerBasicInfo, object>> propertyFunc, object propertyValue)
{
#region 就是这段代码来捕捉Lambda表达式对象并解析的
//var propertyName = (((propertyFunc.Body as UnaryExpression).Operand as MemberExpression).Member as PropertyInfo).Name;//利用VS跟踪工具获得的RunTimeExpression转换过来的方法
var propertyName = ((propertyFunc.Body as UnaryExpression).Operand as MemberExpression).Member.Name;//简化后的方法
#endregion PropertyInfo[] props = this.GetType().GetProperties();
try
{
foreach (PropertyInfo p in props)
{
if (p.SetMethod != null)
{
object value;
if (p.Name.Equals(propertyName))
{
value = Convert.ChangeType(propertyValue, p.PropertyType);
}
else
{
Type t = p.PropertyType;
value = t.IsValueType ? Activator.CreateInstance(t) : (t.Name.ToLower().Equals("string") ? string.Empty : null);
}
p.SetValue(this, value);
}
}
}
catch (Exception)
{
throw;
}
}
}

上面这段代码主要实现了这样一个功能:通过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. HDU6739 2019CCPC秦皇岛赛区 I. Invoker

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=6739思路:暴力dp           一个special skill最多有6种排列组合          ...

  2. mahout从入门到放弃--安装(1)

    1.稀里糊涂下载 我的集群是hadoop 2.7.3 ,本来想找到对应的mahout版本,但是没有找到.本着安全原则,mahout最新版本是0.14.0,回退一个版本使用0.13.0 mahout地址 ...

  3. c#图像处理的简单算法

    原文链接:https://blog.csdn.net/wchstrife/article/details/78984735 使用C#进行图像处理前言之前一直认为图像处理是一件很高大上的事情,在一门选修 ...

  4. MaxCompute - ODPS重装上阵 第六弹 - User Defined Type

    MaxCompute(原ODPS)是阿里云自主研发的具有业界领先水平的分布式大数据处理平台, 尤其在集团内部得到广泛应用,支撑了多个BU的核心业务. MaxCompute除了持续优化性能外,也致力于提 ...

  5. 遍历文件夹 DirectoryInfo类

    该类有三个方法: GetDirectories()  当前目录的子目录 GetFiles()   当前目录的文件列表 GetFileSystemInfos()  当前目录的文件.子目录,返回强类型Fi ...

  6. UVA 11178 Morley's Theorem 计算几何模板

    题意:训练指南259页 #include <iostream> #include <cstdio> #include <cstring> #include < ...

  7. [LibreOJ 3119]【CTS2019】随机立方体【计数】【容斥】

    Description Solution 记\(N=min(n,m,l)\) 首先考虑容斥,记\(f(i)\)为至少有i个位置是极大的,显然极大的位置数上界是N. 那么显然\(Ans=\sum\lim ...

  8. HDU 6136 Death Podracing (堆)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=6136 题解 完了,普及题都不会做了... 发现一个重要性质是只有相邻的人才会相撞,于是直接拿堆维护即可 ...

  9. Spring Boot教程(三十二)多数据源配置与使用

    之前在介绍使用JdbcTemplate和Spring-data-jpa时,都使用了单数据源.在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.propertie ...

  10. sqli-labs(42)

    0x01 喔? 熟悉的界面? 注册一下 但是好像不行了 那我们只有 嘻嘻看看页面了 也是以失败告终的  那我们该怎么办  我们来看看源码 我们看见login的页面未对 password进行任何的过滤 ...