使用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    = 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; }

    }

}

 

你可能感兴趣的:(express)