zoukankan      html  css  js  c++  java
  • C# 反射

    /// <summary>
    /// 封装反射的一些方法
    /// </summary>
    public class Reflection
    {
    /// <summary>
    /// 根据源对象的属性填充目标对象的对应字段
    /// </summary>
    /// <param name="source">获取数据的源对象</param>
    /// <param name="target">填充数据的目标对象</param>
    public static void GetViewModelProperties(object source, object target)
    {
    if (source != null)
    {
    foreach (PropertyInfo item in target.GetType().GetProperties())
    {
    var attr = source.GetType().GetProperties().FirstOrDefault(p => p.Name == item.Name);
    if (attr != null)
    {
    var value = attr.GetValue(source, null);
    // 不为null或空的数据才填入,确保有意义
    if (value != null && !string.IsNullOrEmpty(value.ToString()))
    item.SetValue(target, value, null);

    }
    }
    }
    }

    /// <summary>
    /// 获取修改后不同字段对应的DisplayName特性和修改前对应的值
    /// </summary>
    /// <param name="bObj">修改前的对象</param>
    /// <param name="AObj">修改后的对象</param>
    /// <returns>特性名和修改前的值组合字符串," , "分割</returns>
    public static string GetDisplayNameFromComparedObject(object bObj, object AObj)
    {
    string recordStr = string.Empty;
    foreach (var item in AObj.GetType().GetProperties())
    {
    var modelAttr = bObj.GetType().GetProperty(item.Name);
    object oldValue = modelAttr.GetValue(bObj, null);
    object value = item.GetValue(AObj, null);
    if (oldValue == null || value == null)
    continue;
    if (!oldValue.Equals(value))
    {
    // 获取DisplayName特性值
    object[] objs = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
    if (objs.Length > 0)
    {
    DisplayNameAttribute attr = objs[0] as DisplayNameAttribute;
    if (attr != null)
    recordStr += attr.DisplayName + ":" + oldValue + " , ";
    }
    }
    }
    return recordStr;
    }
    /// <summary>
    /// 根据列表生成表头为DisplayName的DataTable
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="lst"></param>
    /// <returns></returns>
    public static DataTable GetDisplayNameToDataTable<T>(List<T> lst)
    {
    DataTable dt = new DataTable();
    foreach (var item in typeof(T).GetProperties())
    {
    string displayName = string.Empty;
    object[] objs = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
    if (objs.Length > 0)
    displayName = (objs[0] as DisplayNameAttribute).DisplayName;

    dt.Columns.Add(new DataColumn(displayName, item.PropertyType));
    }

    foreach (var report in lst)
    {
    DataRow dr = dt.NewRow();
    foreach (var item in report.GetType().GetProperties())
    {
    string displayName = string.Empty;
    object[] objs = item.GetCustomAttributes(typeof(DisplayNameAttribute), true);
    if (objs.Length > 0)
    displayName = (objs[0] as DisplayNameAttribute).DisplayName;

    dr[displayName] = item.GetValue(report, null);
    }
    dt.Rows.Add(dr);
    }
    return dt;
    }
    }

  • 相关阅读:
    python学习笔记(一):基本概念
    selenuim webDriver API 16种定位方式
    css属性之display行内标签 块级标签 隐藏显示
    python------面向对象编程
    网络编程---发送http请求
    python----tcp/ip http
    python基础_md5加密与加盐
    python-----环境变量
    低代码工具-page-pipepline
    模块化的构建工具
  • 原文地址:https://www.cnblogs.com/louby/p/4852743.html
Copyright © 2011-2022 走看看