将Lambda表达式作为参数传递并解析-在构造函数参数列表中使用Lambda表达式
Posted 秋天的竹子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将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表达式的主要内容,如果未能解决你的问题,请参考以下文章