首页 > 代码库 > 使用Expression tree访问类的属性名称与值

使用Expression tree访问类的属性名称与值

  表达式树Expression是Linq中一项比较重要的功能,对其深刻了解Lamda以及计算表达式有很大的帮助.

下面是利用 Expression<Func<Object>>[]取得Func<Object>中的操作数或成员名称以及值。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Linq.Expressions;using System.Reflection;namespace ExpressionTree{    class Program    {        static void Main(string[] args)        {            MyClass cls = new MyClass() { Memo = "ffffddddd", Name = "dfdf", Age = 33 };            Dictionary<string, string> dic = GetProps(() => cls.Memo, () => cls.Age);            foreach (KeyValuePair<string,string> item in dic)            {                Console.WriteLine(item.Key + "=" + item.Value);            }            Console.Read();        }        static Dictionary<string, string> GetProps(params Expression<Func<Object>>[] funcs)        {            Dictionary<string, string> dic = new Dictionary<string, string>();            MemberExpression member = null;            UnaryExpression unary = null;            foreach (Expression<Func<Object>> func in funcs)            {                unary = func.Body as UnaryExpression;                if (unary != null)                {                    member = unary.Operand as MemberExpression;                }                else                {                    member = func.Body as MemberExpression;                }                PropertyInfo prop = member.Member as PropertyInfo;                object value    =http://www.mamicode.com/ func.Compile().Invoke();                dic.Add(prop.Name, Convert.ToString(value));            }            return dic;        }    }    class MyClass    {        public string Name { get; set; }        public int Age { get; set; }        public string Memo { get; set; }    }}

 

使用Expression tree访问类的属性名称与值