zoukankan      html  css  js  c++  java
  • 获取动态类型变量的属性值

    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);
        }
    }
     
  • 相关阅读:
    Hash详解
    手写2048
    20180429模拟赛T1——添边问题
    题解:UVA1025 A Spy in the Metro
    20180418模拟赛T2——Gym
    20180418模拟赛T1——Seq
    学习:中国剩余定理
    20180414模拟赛T2——拼图
    20180414模拟赛T1——BEAD
    学习:树状数组
  • 原文地址:https://www.cnblogs.com/haight/p/5203650.html
Copyright © 2011-2022 走看看