博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取动态类型变量的属性值
阅读量:4349 次
发布时间:2019-06-07

本文共 1145 字,大约阅读时间需要 3 分钟。

public static object GetProperty(object o, string member){    if(o == null) throw new ArgumentNullException("o");    if(member == null) throw new ArgumentNullException("member");    Type scope = o.GetType();    IDynamicMetaObjectProvider provider = o as IDynamicMetaObjectProvider;    if(provider != null)    {        ParameterExpression param = Expression.Parameter(typeof(object));        DynamicMetaObject mobj = provider.GetMetaObject(param);        GetMemberBinder binder = (GetMemberBinder)Microsoft.CSharp.RuntimeBinder.Binder.GetMember(0, member, scope, new CSharpArgumentInfo[]{CSharpArgumentInfo.Create(0, null)});        DynamicMetaObject ret = mobj.BindGetMember(binder);        BlockExpression final = Expression.Block(            Expression.Label(CallSiteBinder.UpdateLabel),            ret.Expression        );        LambdaExpression lambda = Expression.Lambda(final, param);        Delegate del = lambda.Compile();        return del.DynamicInvoke(o);    }else{        return o.GetType().GetProperty(member, BindingFlags.Public | BindingFlags.Instance).GetValue(o, null);    }}

 

 

转载于:https://www.cnblogs.com/haight/p/5203650.html

你可能感兴趣的文章
Thrift源码分析(二)-- 协议和编解码
查看>>
考勤系统之计算工作小时数
查看>>
4.1 分解条件式
查看>>
关于C++ const成员的一些细节
查看>>
《代码大全》学习摘要(五)软件构建中的设计(下)
查看>>
C#检测驱动是否安装的问题
查看>>
web-4. 装饰页面的图像
查看>>
微信测试账户
查看>>
算法练习题
查看>>
学习使用Django一 安装虚拟环境
查看>>
Hibernate视频学习笔记(8)Lazy策略
查看>>
CSS3 结构性伪类选择器(1)
查看>>
IOS 杂笔-14(被人遗忘的owner)
查看>>
前端基础之BOM和DOM
查看>>
[T-ARA/筷子兄弟][Little Apple]
查看>>
编译Libgdiplus遇到的问题
查看>>
【NOIP 模拟赛】Evensgn 剪树枝 树形dp
查看>>
java学习笔记④MySql数据库--01/02 database table 数据的增删改
查看>>
程序员最想得到的十大证件,你最想得到哪个?
查看>>
jQueru中数据交换格式XML和JSON对比
查看>>