zoukankan      html  css  js  c++  java
  • 定义通用的可通过lambda表达式树来获取属性信息

    /// <summary>
    /// 获取指定属性信息(非String类型存在装箱与拆箱)
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="select"></param>
    /// <returns></returns>
    public static PropertyInfo GetPropertyInfo<T>(Expression<Func<T,dynamic>> select)
    {
        var body = select.Body;
        if (body.NodeType == ExpressionType.Convert)
        {
            var o = (body as UnaryExpression).Operand;
            return (o as MemberExpression).Member as PropertyInfo;
        }
        else if (body.NodeType == ExpressionType.MemberAccess)
        {
            return (body as MemberExpression).Member as PropertyInfo;
        }
        return null;
    }
    /// <summary>
    /// 获取指定属性信息(需要明确指定属性类型,但不存在装箱与拆箱)
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <typeparam name="TR"></typeparam>
    /// <param name="select"></param>
    /// <returns></returns>
    public static PropertyInfo GetPropertyInfo<T, TR>(Expression<Func<T, TR>> select)
    {
        var body = select.Body;
        if (body.NodeType == ExpressionType.Convert)
        {
            var o = (body as UnaryExpression).Operand;
            return (o as MemberExpression).Member as PropertyInfo;
        }
        else if (body.NodeType == ExpressionType.MemberAccess)
        {
            return (body as MemberExpression).Member as PropertyInfo;
        }
        return null;
    }
    /// <summary>
    /// 获取类型的所有属性信息
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="select"></param>
    /// <returns></returns>
    public static PropertyInfo[] GetPropertyInfos<T>(Expression<Func<T,dynamic>> select)
    {
        var body = select.Body;
        if (body.NodeType == ExpressionType.Parameter)
        {
           return (body as ParameterExpression).Type.GetProperties();
        }
        else if(body.NodeType==ExpressionType.New)
        {
            return (body as NewExpression).Members.Select(m => m as PropertyInfo).ToArray();
        }
        return null;
    }
  • 相关阅读:
    李洪强IOS经典面试题 33-计算有多少个岛屿
    李洪强iOS经典面试题32-简单介绍 ARC 以及 ARC 实现的原理
    李洪强iOS经典面试题31-解释垃圾回收的原理
    iOS音频合并
    Macbook小问题
    weex-iOS集成
    WEEX快速入门
    Mac上Nginx-增加对HLS的支持
    iOS直播-基于RTMP的视频推送
    iOS直播-播放基于RTMP协议的视频
  • 原文地址:https://www.cnblogs.com/shitaotao/p/7648261.html
Copyright © 2011-2022 走看看