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;
    }
  • 相关阅读:
    pip install报错:RuntimeError: Python version >= 3.5 required
    简明conda使用指南
    Ninja使用Visual Studio(cl.exe)构建
    cmake设定boost python3
    系统程序员成长计划——像机器一样思考(二)
    在Redis Sentinel环境下,jedis该如何配置
    如何用Go语言实现汉诺塔算法
    pt-online-schema-change的实现原理
    MySQL Sniffer
    如何利用docker快速构建MySQL主从复制环境
  • 原文地址:https://www.cnblogs.com/shitaotao/p/7648261.html
Copyright © 2011-2022 走看看