• 使用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; }
        }
    }
  • 相关阅读:
    匿名对象
    再次安装xampp遇到的各类问题汇总
    jupyter notebook添加Anaconda虚拟环境的python kernel
    1003. 我要通过!
    大数据分析-excel常用技巧
    Jupyter Notebook 修改默认打开的文件夹的位置
    A*算法介绍
    MATLAB常用函数(不定时更新)
    2019数学建模美赛感悟
    Windows许可证即将到期激活教程
  • 原文地址:https://www.cnblogs.com/cang/p/4145180.html
Copyright © 2020-2023  润新知