将Lambda表达式作为参数传递并解析-在构造函数参数列表中使用Lambda表达式
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表达式的更多相关文章
- Sql语句报ORA-01795: 列表中的最大表达式数为 1000
错误信息:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000,错误信息如下: serviceid是:work -------------other W ...
- IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法
问题描写叙述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决的方法: 问题原因是:SQL进行IN查询时.IN中的 ...
- java jdbc oracle ORA-01795: 列表中的最大表达式数为 1000
在操作SQL中存在In的数量如果超过1000条会提示 ORA-01795: 列表中的最大表达式数为 1000 归纳有几种方式出现的: 第一种是:我在上一个 [jdbc 同时执行 查询和删除操]作中 ...
- 对ORA-01795: 列表中的最大表达式数为 1000的处理(算法:计算数量及切割)
/** * @category * 原:strIDs in ( 100001,100002,100003,....................,110001,120001,130001,1400 ...
- ORA-01795: 列表中的最大表达式数为1000的解决方法
IN中的数据量不能超过1000条. 解决方案:把条件分成多个少于1000的IN即: DELETEFROMT_MM_SECTION_SITE_UPDATEWHERE T.T_MM_SECTION_SL_ ...
- ORA-01795: 列表中的最大表达式数为 1000
系统报出一SQL异常,内容如下: java.sql.SQLException: ORA-01795: maximum number of expressions in a list is 1000 找 ...
- java.sql.SQLSyntaxErrorException: ORA-01795: 列表中的最大表达式数为 1000
后台报了一些异常日志,查阅后发现在 oracle 数据库中使用 in 关键字条件不能超过 1000 个,当时写查询语句时没有关注这个问题 总结一下解决方法 1.分多次查询,对查询要求不高的话.把入参的 ...
- Java中的Lambda表达式
Lambda来源于希腊字母入,发音为 /'læmdə/对高数有所了解的人都知道λ用于声明一个数学逻辑系统,表示根据XX的输入参数,会返回某个Y结果.这正是编程语言中函数(方法)的意思.因此Lambd ...
- Java 中的 Lambda 表达式
Lambda表达式 Lambda 表达式是 JDK1.8 的一个新特性,又称特殊的匿名内部类,可以取代大部分的匿名内部类,语法更简洁,可以写出更优雅的 Java 代码,可以极大地优化代码结构. Lam ...
随机推荐
- mybatis 分页插件PageHelper的简单使用
首先在pom.xml配置文件中增加相关的插件. 插件地址:https://github.com/pagehelper/Mybatis-PageHelper <dependency> < ...
- STM32CUBE+KEIL+Compiler V6使用方法
可以参考:https://blog.csdn.net/PeterSun01/article/details/90445439https://www.jianshu.com/p/18a58fee94ce ...
- qt5--列表控件QListWidget
需要 #include <QListWidget> #include <QListWidgetItem> 列表控件可以让我们以列表形式呈现内容,是界面 ...
- java——解决"java.io.StreamCorruptedException: invalid stream header: xxx"
这个错误是由序列化引起的,可能的原因以及解决方法: 1.kryo对于集合(比如 Map)的反序列化会失效,报这个错误,解决办法比较暴力,不用kryo了,直接用java原生方法. 2.使用Java原生方 ...
- layer 1.8.5 引用样式失效
在layer.min.js里,默认引用的官网的样式,目前,网址失效.所以使用本地的样式即可. 将e后面的网址去除,即使用本地的样式.
- javascript中的原型和原型链(四)
new运算符工作原理
- 「TJOI2019」甲苯先生的滚榜
题目链接 问题分析 参照数据范围,我们需要一个能够在\(O(n\log n)\)复杂度内维护有序数列的数据结构.那么平衡树是很好的选择.参考程序中使用带旋Treap. 参考程序 #pragma GCC ...
- Linux下不同组件运行命令
Spark优化配置 添加外包路径 1.1 vim $SPARK_HOME/conf/spark-defaults.conf spark.executor.extraClassPath file:/// ...
- XSS这段时间的学习总结
0X01利用平台payload获取COOKIE 本机IP 192.168.1.100 靶机win7 192.168.1.102 我们先创建一个cookie的项目 然后在可以执行xss的地方插入我们的恶 ...
- spark 笔记 1: 如何着手
必读:从官方的开发者页面着手,包括如何构建spark以及编码规范(强烈建议读读编程规范)等:https://cwiki.apache.org/confluence/display/SPARK/Cont ...