csharp 动态从C#对象获取属性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了csharp 动态从C#对象获取属性值相关的知识,希望对你有一定的参考价值。

public static object GetPropertyValue(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.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);
    }
    return o.GetType().GetProperty(member, BindingFlags.Public | BindingFlags.Instance).GetValue(o, null);
}

以上是关于csharp 动态从C#对象获取属性值的主要内容,如果未能解决你的问题,请参考以下文章

csharp 按属性名称获取对象的属性值

从C#中的托管对象属性获取值的最佳方法

如何以编程方式从动态 JObject 获取属性

csharp C#使用Lambda表达式为动态类型和动态属性排序通用列表

C#高性能动态获取对象属性值

csharp C#动态对象嵌套成员调用