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;
    }
  • 相关阅读:
    js实现element中可清空的输入框(1)
    vue中v-model的学习
    Oracle触发器和MySQL触发器的简单应用
    Java中的多线程你只要看这一篇就够了()
    HTML 随笔记之 刷新页面
    HTML CSS 随笔记之 cursor
    float到底是干什么的?
    Spring Boot 事物的快速应用
    java web 中文乱码
    LVM 创建实例
  • 原文地址:https://www.cnblogs.com/shitaotao/p/7648261.html
Copyright © 2011-2022 走看看