• 定义通用的可通过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;
    }
  • 相关阅读:
    周二
    周末
    简单I/O
    格式输出(1)
    c语言—变量
    水仙花数
    控制语句—循环语句
    mysql6数据库安装与配置
    如何解决Tomcat端口号被占用
    eclipse配置tomcat详细步骤
  • 原文地址:https://www.cnblogs.com/shitaotao/p/7648261.html
Copyright © 2020-2023  润新知