程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 使用Expression tree訪問類的屬性名稱與值,expressiontree

使用Expression tree訪問類的屬性名稱與值,expressiontree

編輯:C#入門知識

使用Expression tree訪問類的屬性名稱與值,expressiontree


  表達式樹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; }
    }
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved