使用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; }
    }
}
时间: 2024-10-23 14:58:28

使用Expression tree访问类的属性名称与值的相关文章

js 获取函数的所有参数和遍历JavaScript某个对象所有的属性名称和值的方法

获取所有参数 function test(){ for(var i=0;i<arguments.length;i++)  document.write(arguments[i]); } 遍历某个对象所有的属性名称和值的方法 <script language="javascript"> var obj = new Object(); obj.myname = "我是对象"; obj.pro2 = "23"; obj.pro3 = 

遍历JavaScript某个对象所有的属性名称和值

1 /* 2 * 用来遍历指定对象所有的属性名称和值 3 * obj 需要遍历的对象 4 */ 5 function allPrpos(obj) { 6 // 用来保存所有的属性名称和值 7 var props = ""; 8 // 开始遍历 9 for(var p in obj){ 10 // 方法 11 if(typeof(obj[p])=="function"){ 12 obj[p](); 13 }else{ 14 // p 为属性名称,obj[p]为对应属性

遍历某个对象所有的属性名称和值(JavaScript)

/* * 用来遍历指定对象所有的属性名称和值 * _list 需要遍历的对象 */ function all_pro(_list) { // 用来保存所有的属性名称和值 var pro = ""; // 开始遍历 for(var i in _list){ // 方法 if(typeof(_list[i])=="function"){ _list[i](); }else{ // i 为属性名称,_list[i]为对应属性的值 pro+= i + "=&quo

实体类、数据访问类、属性扩展

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 实体类_数据访问类.App_Code { public class Users { private string _username; //封装 /// <summary> /// 用户名 /// </summary> public

面向对象中对象和类以及如何访问类中属性和方法

对象:客观存在的具体事物.某一个具体的个体 *类:具有相同行为和共同特征的对象的集合,类是人类脑海中一个抽象的概念,通过类创建对象 *类中的成员:1.成员属性(描述外部特征) 2.成员方法(描述功能行为)* 如何定义一个类: * [修饰符] class 类名{ * //1.属性的定义:与定义变量类似 * [修饰符] 数据类型 属性名; * //2.方法的定义 * [修饰符] 返回值类型 方法名(形参列表){ * //方法体; * } * } * 成员变量和局部变量的区别: * 1.作用域不同:成

利用Lambda获取类中属性名称

1 public class TypeInfoHelper 2 { 3 public static string GetPropertyName<T>(Expression<Func<T, dynamic>> property) 4 { 5 var propertyName = string.Empty; 6 var body = property.Body; 7 if (body.NodeType == ExpressionType.Convert) 8 { 9 va

反射获取 obj类 的属性 与对应值

MethodInfo[] infos = type.GetMethods(); List<string> attrList = new List<string>(); foreach (MethodInfo me in infos) { attrList.Add("" + me.IsPublic); attrList.Add("继承自" + me.DeclaringType + "方法名" + me.Name + &quo

python 类 二: 类的属性

类有数据属性和方法属性: 属性就是 一个对象的数据成员或者函数成员. 类的数据属性只有被类的实例引用后去更新或者被类定义的可以访问这个数据属性的方法去改变( 也要通过类的实例化). 也可以说,类的数据属性是跟类绑定的,类的数据属性是不受任何实例化的对象所影响的. 有两种方法可以去访问类的属性,一种是dir(),一种是 class.__dict__属性 dir() 可以看到对象的属性的名字列表. 类的内置属性 __dict__  则可以返回一个字典,对应的是 属性名 键值 的对应关系 .也就是返回

java类(Class)的概念;对象的概念,声明类的属性 和方法,

类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网红.明星.草根.宅男.萝莉.沙雕 [3] 类可以理解为现实生活中所说的 “类型” 为什么会有类的概念? 现实生活中为了更好的区分事物,把事物进行归类,进而更好的认识事物. 在程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物 对象的概念 对象是类的具体实现,表示一个独立的.唯一的个体.